TypeScriptでいうstrictPropertyInitialization
基本的な考え方
classのpropertyが存在するがconstructorで初期化されていない => のちのち必要になると代入される.
coustructor以降は何がどういう順序で実行されるか保証できないので、undefinedなpropertyへアクセスする可能性がある.
=> undefinedがありうることを明示すべき
基本方針
Null安全への指針と同じく、1つのsetとして扱うべきでないものは型を明確に分けて運用すべき.
やり口は以下が有り得そう
- 未初期化を許容し、型はT | undefinedのUnion型とする
- 未初期化を不可能とし、Optionモナド型プロパティに対するNone
での初期化をおこなう
前者の利点はかなり一般的な型システムで完結しているところ。後者はモナド型(なければライブラリ)が必要.
後者はモナドの文脈で綺麗なコードに持ち込みやすい.
各言語での対応
TypeScript
Null安全との兼ね合いもあるので、後者のOptionモナド型を基礎としたい.