17項 遅延評価の使用を検討する

遅延評価の使用を検討する

遅延評価とは、必要になるまで処理を遅らせるということです。


大量のディスクアクセスを行うクラスを考えます。

class LargeObject
{
    LargeObject(ObjectID id); // ディスクから大量のデータを読み込み、
                 // オブジェクトを作成する。

    const string &field1() const;
    int field2() const;
    double field3() const;
};


void restoreAbdProcessObject(ObjectID id)
{
    LargeObject object(id); //大量のディスクアクセス

    if(object.field2() == 0){
        cout << "Object" << id << ": null field2.\n";
    }
}

restoreAbdProcessObject()では、field2のみで十分ですが、コンストラクタで無駄なデータを読み込んでいます。
遅延評価の考え方では、LargeObjectのコンストラクタでデータを読み込まず、データが必要になったら、必要なデータを読み込むようにします。


要約

遅延評価は、無駄な処理を避けられますが、すべての処理が必要な場合、速度やメモリ効率を低下させます。
遅延評価の実装はクラスインタフェースを変えずに行えるので、プロファイラーで見つけたボトルネック部分をあとから遅延評価にすることもできます。