福特、郭曉剛編寫的《函數式編程思維》脫離特 定的語言特性,關注各種OOP語言的共同實踐做法, 展示如何通過函數式編程解決問題。知名軟體架構師 Neal Ford展示了不同的編程範式,幫助我們完成從 Java命令式編程人員,到使用Java、Clojure、 Scala的函數式編程人員的完美轉變,建立對函數式 語言的語法和語義的良好理解。 本書適合Java、Clojure、Scala及其他想要提 高工作效率、關注函數式編程的程式師閱讀。
Neal Ford
在跨國IT諮詢公司ThoughtWorks擔任總監、軟體架構師和文化基因傳播人。他精通各種程式設計語言,主要的諮詢業務是大規模企業應用的設計、構建和工程實踐。他還是一位國際知名的講師,登上過全世界各種開發者會議的講臺。
譯者序 ix
前言 xi
第1章 為什麼 1
1.1 範式轉變 2
1.2 跟上語言發展的潮流 4
1.3 把控制權讓渡給語言/ 運行時 4
1.4 簡潔 5
第2章 轉變思維 9
2.1 普通的例子 9
2.1.1 命令式解法 9
2.1.2 函數式解法 10
2.2 案例研究:完美數的分類問題 15
2.2.1 完美數分類的命令式解法 15
2.2.2 稍微向函數式靠攏的完美數分類解法 16
2.2.3 完美數分類的Java 8 實現 18
2.2.4 完美數分類的Functional Java 實現 19
2.3 具有普遍意義的基本構造單元 21
2.3.1 篩選 22
2.3.2 映射 23
2.3.3 折疊/ 化約 25
2.4 函數的同義異名問題 28
2.4.1 篩選 28
2.4.2 映射 31
2.4.3 折疊/ 化約 33
第3章 權責讓渡 37
3.1 反覆運算讓位于高階函數 37
3.2 閉包 38
3.3 柯裡化和函數的部分施用 41
3.3.1 定義與辨析 41
3.3.2 Groovy 的情況 42
3.3.3 Clojure 的情況 44
3.3.4 Scala 的情況 44
3.3.5 一般用途 47
3.4 遞迴 48
3.5 Stream 和作業順序重排 53
第4章 用巧不用蠻 55
4.1 記憶 55
4.1.1 緩存 56
4.1.2 引入“記憶” 59
4.2 緩求值 65
4.2.1 Java 語言下的緩求值反覆運算子 65
4.2.2 使用Totally Lazy 框架的完美數分類實現 67
4.2.3 Groovy 語言的緩求值清單 69
4.2.4 構造緩求值列表 72
4.2.5 緩求值的好處 74
4.2.6 緩求值的欄位初始化 76
第5章 演化的語言 79
5.1 少量的資料結構搭配大量的操作 79
5.2 讓語言去迎合問題 81
5.3 對分發機制的再思考 82
5.3.1 Groovy 對分發機制的改進82
5.3.2 “身段柔軟”的Clojure 語言 83
5.3.3 Clojure 的多重方法和基於任意特徵的多態 85
5.4 運算子重載 87
5.4.1 Groovy 87
5.4.2 Scala 89
5.5 函數式的資料結構 91
5.5.1 函數式的錯誤處理 91
5.5.2 Either 類 92
5.5.3 Option 類 100
5.5.4 Either 樹和模式匹配 100
第6章 模式與重用 107
6.1 函數式語言中的設計模式 107
6.2 函數級別的重用 108
6.2.1 Template Method 模式 109
6.2.2 Strategy 模式 111
6.2.3 Flyweight 模式和記憶 113
6.2.4 Factory 模式和柯裡化 116
6.3 結構化重用和函數式重用的對比 117
第7章 現實應用 125
7.1 Java 8 125
7.1.1 函數式介面 126
7.1.2 Optional 類型 128
7.1.3 Java 8 的stream 128
7.2 函數式的基礎設施 129
7.2.1 架構 129
7.2.2 Web 框架 132
7.2.3 資料庫 133
第8章 多語言與多範式 135
8.1 函數式與元編程的結合 136
8.2 利用元編程在資料類型之間建立映射 137
8.3 多範式語言的後顧之憂 140
8.4 上下文型抽象與複合型抽象的對比 141
8.5 函數式金字塔 143
作者簡介 147
封面介紹 147顯示全部資訊