たれぱんのびぼーろく

わたしの備忘録、生物学とプログラミングが多いかも

プロパティ初期化に関わる私の指針

TypeScriptでいうstrictPropertyInitialization

基本的な考え方

classのpropertyが存在するがconstructorで初期化されていない => のちのち必要になると代入される.
coustructor以降は何がどういう順序で実行されるか保証できないので、undefinedなpropertyへアクセスする可能性がある.
=> undefinedがありうることを明示すべき

基本方針

Null安全への指針と同じく、1つのsetとして扱うべきでないものは型を明確に分けて運用すべき.

やり口は以下が有り得そう

  • 未初期化を許容し、型はT | undefinedのUnion型とする
  • 未初期化を不可能とし、Optionモナド型プロパティに対するNoneでの初期化をおこなう

前者の利点はかなり一般的な型システムで完結しているところ。後者はモナド型(なければライブラリ)が必要.
後者はモナドの文脈で綺麗なコードに持ち込みやすい.

各言語での対応

TypeScript

Null安全との兼ね合いもあるので、後者のOptionモナド型を基礎としたい.