【ちえんひょうか】
遅延評価 とは?
最終更新:
💡 値が必要になるまで、計算を後回しにする
式の値が必要になるまで評価を遅らせる方式。使われない値の計算を省いたり、無限の列から必要な有限部分を扱ったりできる。
📌 このページのポイント
遅延評価って、計算をサボるってこと?
先に計算する方式とは何が違うの?
無限リストを全部メモリに置くの?
全部を作るわけではないよ。例えばHaskellの無限に続く平方数の列からtake 5で取り出すと、0、1、4、9、16という有限の結果を扱える。一方、無限の列全体の長さを求めるような処理は終わらないんだ。
ジェネレーターは、次の値を求めると実行を再開するので、必要に応じて値を作る例になるよ。ただし式全般の評価方式と同じものではない。JavaScriptのnew Promiseに渡すexecutorは生成時に同期的に呼ばれるので、Promise自体を遅延評価の例にはできないんだ。
使えば必ず速くなるの?
必ずではないよ。不要な評価を省ける一方で、結果をいつ必要とするかによって実行の様子が変わる。無限の列なら有限の部分で処理を終えられるか、エラーがいつ分かるかなども確認しよう。実際の性能は、処理と実装に合わせて測る必要があるね。
まとめ:ざっくりこれだけ覚えればOK!
「遅延評価」って出てきたら「必要になったときだけ計算するしくみ」と思えればだいたいOK!
📖 おまけ:英語の意味
「Lazy Evaluation」 = 怠惰な評価
💬 「Lazy(怠惰な)」という名前は、必要になるまで計算しない「怠け者」な振る舞いから来ているんだよ。対義語は即座に計算する「Eager Evaluation(先行評価)」だよ