為什麼要做比較#
第一部已經把函式式風格的核心觀念建立完畢。第二部要做一件實際的事:把同一個練習題用兩種風格各寫一遍,看看差在哪裡。
對照組是:
- 物件導向(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 的觀點檢視「什麼時候需要型別」
本部要旨#
隨著難度上升,兩種風格的差異會逐漸放大。
結局可能與你預期的不同——做好心理準備。