內容介紹
函式式設計是一種重要的程式設計模式,它可以追溯到很久之前。函式式程式設計總是與教授程式設計的人們有關.函式式程式設計的整潔而富有邏輯的概念是它特別適合於教學的重要原因。廣泛使用計算機和自己設計程式的行業也發現函式式程式設計是實現其目標最有效的辦法。然而,在許多所謂的“主流”軟體公司看來,函式式程式設計一直以來只具有學術研究價值,他們普遍選擇傳統的指令式設計方法,如面向對象等。最近幾年,在NET平台上把越來越多的函式式成分增加到指令式語言中。在VisualStudio2010中增加了F#語言,它是用微軟主流開發平台開發的第一個混合的函式式語言。甚至有更多的函式式功能被引入到C#和VBNET中,這說明了微軟公司對函式式設計的認同。
作者介紹
Oliver Sturm有20多年的專業軟體開發經驗。他是應用程式體系結構、程式設計語言和DevExpress開發的第三方.NET工具等多個領域的專家。自2002年開始,他的主要興趣在於.NET平台。Oliver曾在許多國際會議上發表過演說,編寫了20多個培訓課程,並在雜誌上用英語和德語發表了100多篇文章。他也曾從事計算機基礎編程教學15年之久。由於他對.NET社區所做的貢獻,因此多次獲得微軟英國最佳C#程式設計師稱號。以蘇格蘭為據點,Oliver主要從事自由諮詢師和培訓師的工作,同時還是國際諮詢公司thinktecture的顧問。他的個人部落格是www.sturmnet.org/blog,商業網址是www.oliversturm.com,電子郵件地址是[email protected]。作品目錄
目 錄第Ⅰ部分函式式程式設計引言
第1章函式式程式設計簡史 3
1.1函式式程式設計簡介 3
1.2函式式程式設計語言 4
1.3與面向對象程式設計的關係 7
1.4小結 7
第2章函式式程式設計思想在現代項目
中的套用 9
2.1控制副作用 10
2.2敏捷開發方法 11
2.3聲明式程式設計 11
2.4函式式程式設計的定向思維 11
2.5用C#實現函式式程式設計的
可行性 12
2.6小結 13
第Ⅱ部分C#函式式程式設計基礎
第3章函式、委託和Lambda
表達式 17
3.1函式與方法 17
3.2重用函式 19
3.3匿名函式與Lambda表達式 22
3.4擴展方法 25
3.5引用透明 27
3.6小結 29
第4章泛型 31
4.1泛型函式 32
4.2泛型類 33
4.3約束類型 35
4.4其他泛型類型 36
4.5協變與逆變 38
4.6小結 41
第5章惰性列表工具—疊代器 43
5.1什麼是惰性 43
5.2用.NET方法枚舉元素 44
5.3疊代器函式的實現 47
5.4鏈式疊代器 51
5.5小結 53
第6章用閉包封裝數據 55
6.1動態創建函式 55
6.2作用域存在的問題 56
6.3閉包的工作機制 56
6.4小結 60
第7章代碼即數據 61
7.1.NET中的表達式樹 62
7.2分析表達式 63
7.3生成表達式 68
7.4.NET 4.0特性 71
7.5小結 73
第Ⅲ部分用C#實現常用的函式式
設計技術
第8章局部套用與部分套用 77
8.1參數的解耦 77
8.1.1手動局部套用 78
8.1.2自動局部套用 79
8.1.3調用局部套用函式 81
8.1.4類上下文 81
8.1.5FCSlib庫的內容 84
8.2調用函式的各部分 86
8.3參數順序的重要性 88
8.4小結 89
第9章惰性求值 91
9.1惰性求值的優點 92
9.2傳遞函式 93
9.3顯式的惰性求值 94
9.4惰性求值方法的比較 98
9.4.1可用性 98
9.4.2效率 98
9.5惰性求值方法的選擇 99
9.6小結 99
第10章快取技術 101
10.1記住以前結果的重要性 101
10.2預計算 102
10.3快取 107
10.3.1深度快取 110
10.3.2快取的幾個考慮因素 113
10.4小結 114
第11章遞歸調用 115
11.1C#中的遞歸 115
11.2尾遞歸 117
11.3累加器傳遞模式 119
11.4後繼傳遞模式 120
11.5間接遞歸 123
11.6小結 126
第12章標準高階函式 127
12.1套用運算:Map 127
12.2使用篩選條件:Filter 128
12.3累加操作:Fold 129
12.4LINQ中的Map、Filter
和Fold 134
12.5標準高階函式 135
12.6小結 136
第13章序列 137
13.1何為列表推導 137
13.2用函式方法實現疊代器 138
13.3值域 139
13.4限制 141
13.5小結 143
第14章由函式構建函式 145
14.1組合函式 145
14.2高級的部分套用 148
14.3各種方法的綜合 150
14.4小結 154
第15章可選值 155
15.1空值的含義 155
15.2可選值的實現 156
15.3小結 161
第16章防止數據變化 163
16.1變化不總是件好事 163
16.2錯誤的假定 164
16.2.1靜態數據受歡迎 165
16.2.2深度問題 166
16.2.3克隆 167
16.2.4自動克隆 168
16.3實現不可變容器數據類型 172
16.3.1鍊表 172
16.3.2佇列 178
16.3.3非平衡的二叉樹 180
16.3.4紅黑樹 183
16.4持久數據類型的替代選擇 185
16.5小結 186
第17章單子 187
17.1類型類的概念 188
17.2單子的概念 191
17.3使用抽象的原因 191
17.4Logger單子 195
17.5含糖語法 197
17.6用SelectMany方法建立
綁定 197
17.7小結 199
第Ⅳ部分函式式設計的實際套用
第18章函式式程式設計技術的綜合
套用 203
18.1重構 204
18.1.1用Windows Forms UI實現
列表篩選 204
18.1.2Mandelbrot分形計算 210
18.2編寫新代碼 217
18.2.1使用靜態方法 217
18.2.2優先考慮匿名函式 219
18.2.3優先考慮高階函式 220
18.2.4優先考慮不可變數據 221
18.2.5注意類中行為的實現 222
18.3尋找可以替代函式式設計的
其他方法 222
18.3.1其他需要考慮的問題 222
18.3.2使用已有代碼 224
18.4小結 225
第19章MapReduce模式 227
19.1MapReduce的實現 228
19.2問題的抽象 231
19.3小結 233
第20章函式模組化思想的套用 235
20.1在應用程式中執行SQL
代碼 235
20.2用部分套用和預計算重寫
函式 237
20.3小結 239
第21章函式式技術在現有項目中的
套用 241
21.1.NET Framework 241
21.2LINQ 243
21.2.1LINQ to Objects 243
21.2.2LINQ到查詢後台 247
21.2.3並行化 249
21.3Google MapReduce及其
實現 250
21.4NUnit 252
21.5小結 254