宣言的コードは何をすべき(what)かを定義する。命令的コードはやり方(how)を説明する。どちらも必要だが、両者をごちゃ混ぜにすると予期せぬ振る舞いが発生する。
命令的コードは即時実行される。以下ではMethod1〜3が順番に即時実行される。
var answer = DoStuff(Method1(), Method2(), Method3());
これに対して、宣言的コードは、遅延実行されることがある。
var answer = DoStuff(() => Method1(),
() => Method2(),
() => Method3());
上記コードでMethod1〜3のそれぞれが実行されるか、またそれらの実行順序がどうなるかは、DoStuff()の実装次第である。
データをパラメーターとして使うか、関数をパラメーターとして使うかによって、振る舞いは大きく異なる。入力されるデータが小さい場合はデータを渡すほうが良い場合が多い。一方、入出力のサイズが非常に大きく、かつ、全体をメモリに置く必要がない場合は、関数を使ったほうがリソースの節約になる可能性がある。