Effective C# 3rd 読書メモ 40 即時実行と遅延実行を区別する

宣言的コードは何をすべき(what)かを定義する。命令的コードはやり方(how)を説明する。どちらも必要だが、両者をごちゃ混ぜにすると予期せぬ振る舞いが発生する。

命令的コードは即時実行される。以下ではMethod1〜3が順番に即時実行される。

var answer = DoStuff(Method1(), Method2(), Method3());

これに対して、宣言的コードは、遅延実行されることがある。

var answer = DoStuff(() => Method1(),
    () => Method2(),
    () => Method3());

上記コードでMethod1〜3のそれぞれが実行されるか、またそれらの実行順序がどうなるかは、DoStuff()の実装次第である。

データをパラメーターとして使うか、関数をパラメーターとして使うかによって、振る舞いは大きく異なる。入力されるデータが小さい場合はデータを渡すほうが良い場合が多い。一方、入出力のサイズが非常に大きく、かつ、全体をメモリに置く必要がない場合は、関数を使ったほうがリソースの節約になる可能性がある。

コメントをどうぞ

コメントを残す