遅延初期化

2005年12月5日

遅延初期化とは、変数(OOコンテキストでは通常はクラスのフィールド)を最初のアクセス時に初期化する手法です。正規形はこんな感じです

public FooClass Foo {
  get {
    if (_foo = null) _foo = calculateFoo();
    return _foo;
  }
}

フィールドの値を計算するのが時間がかかり、実際に値が必要になるまで実行したくない場合に遅延初期化は役立ちます。したがって、多くのコンテキストでフィールドが必要ない、またはオブジェクトをすばやく初期化して遅れを後で優先する場合に役立ちます。

これはクライアントが遅延初期化された値を必要としない状況で応答性を向上させるための最適化手法であることを覚えておいてください。他の最適化と同様に、解決すべき実際のパフォーマンス上の問題がない限り、この手法を使用してはいけません。

特に、デバッグ中にフィールドを見ようとした場合、通常の使用では発生しないシステムの状態変更が発生するため、遅延初期化はデバッグにおける問題の原因となる可能性があります。( ObservableStateは実際の状態を変更しませんが)。これにより、バグが print ステートメントを追加すると消失するという状況が発生する可能性があります。これは金曜日の午後に深刻な胃潰瘍を引き起こす可能性があるため注意してください。