本部分鋪陳函式式編程的核心觀念,把「為什麼要這樣寫」與「這樣寫意味著什麼」一次講清楚。讀完之後,再進入第二部分的對照分析時,會比較容易看出兩種風格的真正差異在哪裡。

本部要點#

  • 不可變性(Immutability):函式式程式沒有變數,狀態只能誕生、不會被改寫
  • 持久性資料(Persistent Data):把整個資料結構複製太貴,因此引入結構共享(structural sharing)
  • 遞迴與迭代(Recursion and Iteration):在沒有賦值的世界裡,遞迴是表達迴圈的方式;而透過尾呼叫優化(Tail Call Optimization, TCO)可以避免堆疊爆炸
  • 惰性求值(Laziness):只在真正需要值時才計算,讓「無限資料結構」與高效組合成為可能
  • 狀態管理(Statefulness):當外部世界逼著我們改變狀態,例如 I/O 與時間,我們仍然要在受控、明確的範圍內處理它

這五章的順序刻意安排為「禁慾 → 放鬆」:先把「沒有變數」的紀律建立起來,再一步步引進現實世界的妥協。這樣讀者才能清楚分辨:哪些是可以避免的可變性,哪些是必須面對的可變性。