C# での遅延実行と遅延評価の正確な違いを教えてください。これら 2 つは同義語として使用されます。例を挙げて違いを説明してください。
2 に答える
実際には、それらは本質的に同じことを意味します。ただし、遅延という用語を使用することをお勧めします。
怠惰とは、「絶対にやらなければならないまで仕事をしない」という意味です。
延期とは、「呼び出し元が実際に結果を使用するまで結果を計算しない」ことを意味します。
実際には、呼び出し元が評価の結果を使用することを決定した場合(つまり、の反復を開始する場合IEnumerable<T>
)、それはまさに「作業」を実行する必要があるポイントです(データベースへのクエリの発行など)。
延期という用語は、実際に何が起こっているかについて、より具体的/説明的です。私が怠け者だと言うとき、それは私が不必要な仕事をしないことを意味します; それが実際に何を意味するのかについてはあいまいです。ただし、実行/評価が延期されていると言う場合、それは基本的に、実際の結果をまったく提供しておらず、結果を要求するために使用できるチケットを提供していることを意味します。あなたがそれを主張するまで、私は実際に出かけてその結果を得るのを延期します。
C#に関連するため、主題について説明するとき は、延期された用語を使用してください。Lazyはあいまいなバージョンです。
注:遅延実行/評価は、シーケンスのコンテキストでの遅延読み込みまたはフェッチとは異なります。 遅延読み込みとイーガー読み込みは、シーケンスの要素がどのように読み込まれるかを説明するために使用される用語です。シーケンスが遅延ロードされる場合、シーケンスを生成しているものはすべて、一度に1つの要素をロードするのに十分な作業を行うことを意味します。シーケンスが熱心にロードされると、シーケンス全体が一度にロードされ、ローカルバッファに保存されます。使用要件が異なれば、ロードパターンも異なります。