😔

late finalとは?

2023/07/07に公開

なぜlateをつけるのか?

late finalは、Dartで変数を遅延初期化するための修飾子です。この修飾子を使用することで、変数を宣言時に初期化せずに後で初期化することができます。

以下に、Dartでlate finalを使用して変数を遅延初期化するロジックの例を示します。

void main() {
  final myClass = MyClass();
  
  // 変数を遅延初期化する
  late final int lateInitializedValue;
  
  // 遅延初期化前は参照できない
  // print(lateInitializedValue); // Error: LateInitializationError
  
  // 遅延初期化
  lateInitializedValue = 42;
  
  // 遅延初期化後は値にアクセスできる
  print(lateInitializedValue); // 42
}

class MyClass {
  MyClass() {
    // コンストラクタで値を遅延初期化する
    late final int lateInitializedValue;
    
    // 遅延初期化前は参照できない
    // print(lateInitializedValue); // Error: LateInitializationError
    
    // 遅延初期化
    lateInitializedValue = 123;
    
    // 遅延初期化後は値にアクセスできる
    print(lateInitializedValue); // 123
  }
}

上記の例では、late final修飾子を使用してlateInitializedValue変数を遅延初期化しています。遅延初期化前は変数にアクセスするとLateInitializationErrorがスローされますが、遅延初期化後は値にアクセスできます。

late finalを使用する主な目的は、変数が初期化されないとプログラムが正しく動作しない場合や、初期化のタイミングが他の要因に依存する場合に使用します。遅延初期化を利用することで、変数の初期化を適切なタイミングまで遅らせることができます。

まとめ

lateがいつ呼ばれるかのタイミングですが、初めて変数が参照されたタイミングです。なぜなら、初めて変数が参照された時に初期化が行われるからです。

Discussion