為什麼要做比較#

第一部已經把函式式風格的核心觀念建立完畢。第二部要做一件實際的事:把同一個練習題用兩種風格各寫一遍,看看差在哪裡

對照組是:

  • 物件導向(Object-Oriented,OO)版本:使用 Java,部分範例直接取自《Clean Craftsmanship》
  • 函式式版本:使用 Clojure,採 speclj 測試框架

兩個版本都是用測試驅動開發(Test-Driven Development, TDD)寫成。書中會逐步呈現每一個測試與其對應的實作,讓讀者看到結構是如何在紅綠循環中長出來的。

練習的難度梯度#

本部按複雜度遞增排序:

  • 質因數分解(Prime Factors):最簡單的入門
  • 保齡球計分(Bowling Game):稍複雜
  • 閒聊的巴士司機(Gossiping Bus Drivers):模擬問題,更複雜
  • 物件導向程式設計(薪資系統,Payroll):本部最複雜的範例。書中為節省篇幅只展示函式式版本(OO 版本可參考《Agile Software Development: Principles, Patterns, and Practices》第三部)
  • 型別(Types):以 Clojure 的觀點檢視「什麼時候需要型別」

本部要旨#

隨著難度上升,兩種風格的差異會逐漸放大。

結局可能與你預期的不同——做好心理準備。