在外插一篇
當 code 越寫越多管理上就是一個問題,例如今天有個 TodoList 程式,你寫了一個渲染列表的 Function ,裡面分別 call 兩個 function :
假設今天要加上 filter
的 function,於是很自然就想拿原本的 array 的格式去做操作,結果卻報錯了,告訴你 Array 資料結構有誤,結果一看是 sort function 內不只做了 sort 還將資料結構改變,這在你寫的當下完全不得而知發生什麼事,況且今天是前面只有一隻 function ,假設有 10 幾隻 function,這樣追下去很浪費時間,這也就是 Pure function 概念其中之一,不希望你去改外部的狀態,因為會非常難追蹤錯誤。
又或是今天你 call 一個 function 希望計算目前活動參加人數結果,但有人在裡面 call fetch 而你不知道,你就直接拿著 return result 去 run,結果就發現怎麼樣就是 undefined,且 code 永遠最後才執行,Pure function 也不希望你在 function 內執行 side effect。
又或是你 call 一個 function 是想 click 一次就將 count + 1,結果你預期,0 傳進去他回傳 1,但結果有時是 1 有時是 { count: 1 ,等完全無法預測的結果。
所以 pure function 希望