iT邦幫忙

1

TypeScript - Eager & Lazy Evaluation 積極&懶惰求值

  • 分享至 

  • xImage
  •  

Eager Evaluation 積極求值

我現在就要結果!

即使變數尚未被呼叫做使用,也會先計算出來變數的值。

const a = 5 ; 
const b = 10 ; 
const result = a * b; // 即使result還未被使用,也會立即計算
console.log ( result ); // 列印結果 (50)

🟢 優點

  • 初學者友善,就是一般的變數傳遞,非常直覺。
  • 不會產生額外的閉包(Closure)記憶體分配。
  • 適合小型或靜態程式

🔴 缺點

  • 你無法決定這段程式碼「何時」執行。
  • 若該變數「根本不需要」,即時求值還是會強迫把程式碼跑完,浪費運算資源。

Lazy Evaluation 懶惰求值

有需要再叫我~

「計算結果」這件事被延遲到真正需要值的時候。

const  lazyMultiply = ( a, b ) => () => a * b; // 回傳一個函數而不是立即計算
const lazyResult = lazyMultiply ( 5 , 10 ); // 尚未計算
console .log ( lazyResult ()); // 現在才計算 (50);

🟢 優點

  • 由外層函式(respond)掌控執行的時機。且因為執行計算被包在 try...catch 內,任何例外狀況都能被捕捉。
  • 按需執行,節省資源
  • 行為抽離與複用性高,可以把一整段複雜的「商業邏輯動作」打包成一個行為,像包裹一樣傳來傳去,而不必擔心它馬上生效。

🔴 缺點

  • 程式碼稍微繁瑣
  • 除錯(Debugging)路徑較長
  • 如果使用不當,可能會減慢速度,因為計算是在最後一刻進行的。

小節

如果資料量較小,使用eager 方法,否則將使用所有結果。
使用惰性求值可以提高效率,尤其是在處理大數據或只需要部分結果時。

參考資料

https://dev.to/patoliyainfotech/lazy-vs-eager-evaluation-in-javascript-performance-trade-offs-3m7j
https://docs.gradle.org/current/userguide/lazy_eager_evaluation.html
https://khaisastudio.medium.com/eager-vs-lazy-approach-0b4b7ba63c90


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言