深入C#函數式編程
[英] 西蒙·J.潘特(Simon J. Painter)著 周子衿 譯
相關主題
商品描述
"《深入C#函數式編程》闡述了函數式編程的歷史背景、基本概念和實踐,展示瞭如何借助於 C# 語言和函數式編程來增強代碼的可讀性和可維護性以及提高代碼的質量。書中還探討了 C# 語言中非傳統結構的使用方法以及如何通過函數式編程重構現有的代碼。此外,本書還通過豐富的案例分析了在實際業務場景中應用 C# 函數式編程能帶來哪些實際的好處。 通過本書的閱讀,廣大 C# 程序員——無論是初學者還是有經驗的開發者,都可以從中學到如何巧用函數式編程來顯著提高工作效率和代碼質量。"
目錄大綱
簡明目錄
● 第 1 章 緒論 1
● 第 I 部分 我們已經在做的事 27
● 第 2 章 我們目前能做些什麽 29
● 第 3 章 C# 7.0 及後續版本的函數式編程 53
● 第 4 章 函數式代碼:巧乾勝過苦乾 73
● 第 II 部分 深度學習函數式編程 93
● 第 5 章 高階函數 95
● 第 6 章 可區分聯合 123
● 第 7 章 函數式流程 145
● 第 8 章 柯里化和偏函數 177
● 第 9 章 不定循環 189
● 第 10 章 記憶化 207
● 第 III 部分 走出迷霧 215
● 第 11 章 實用函數式 C# 語言 217
● 第 12 章 NuGet 中的現有函數式編程庫 239
● 第 13 章 火星之旅 253
● 第 14 章 結語 283
詳細目錄
第 1 章 緒論 1
1.1 函數式編程是什麽 1
1.2 函數式編程的特性 3
1.2.1 不變性 3
1.2.2 高階函數 3
1.2.3 首選表達式而非語句 5
1.2.4 基於表達式的編程 6
1.2.5 引用透明性 7
1.2.6 遞歸 9
1.2.7 真·遞歸 9
1.2.8 模式匹配 10
1.2.9 無狀態 12
1.3 製作蛋糕 13
1.3.1 命令式蛋糕 13
1.3.2 聲明式蛋糕 14
1.4 函數式編程的起源 15
1.5 還有別的人在用函數式編程嗎 17
1.5.1 純函數式語言 17
1.5.2 首先學習純函數式語言是否值得 18
1.5.3 F# 怎麽樣?是否有必要學 19
1.5.4 多範式語言 20
1.6 函數式編程的好處 21
1.6.1 簡潔 21
1.6.2 可測試性 22
1.6.3 健壯性 22
1.6.4 可預測性 22
1.6.5 更好地支持並發 23
1.6.6 降低代碼噪音 24
1.7 函數式編程的最佳應用場景 24
1.8 更適合使用其他範式的場景 25
1.9 函數式編程能應用到何種程度 25
1.10 單子實際上,先不用擔心這個 26
1.11 小結 26
第 I 部分 我們已經在做的事
第 2 章 我們目前能做些什麽 29
2.1 開始 29
2.2 編寫第一段函數式代碼 30
2.2.1 非函數式的電影查詢示例 30
2.2.2 函數式的電影查詢示例 31
2.3 以結果為導向的編程 33
2.4 可枚舉對象 34
2.5 首選表達式而非語句 38
2.5.1 低調的 Select 38
2.5.2 合而為一:聚合的藝術 42
2.5.3 自定義迭代行為 43
2.6 使代碼不可變 46
2.7 完整的函數式流程 48
2.8 更進一步:提升函數式編程技能 51
2.9 小結 52
第 3 章 C# 7.0 及後續版本的函數式編程 53
3.1 元組 53
3.2 模式匹配 54
3.2.1 銀行賬戶的過程式解決方案 54
3.2.2 C# 7.0 中的模式匹配 57
3.2.3 C# 8.0 中的模式匹配 58
3.2.4 C# 9.0 中的模式匹配 60
3.2.5 C# 10.0 中的模式匹配 60
3.2.6 C# 11.0 中的模式匹配 61
3.3 只讀結構 62
3.4 Init-Only Setter 64
3.5 記錄類型 65
3.6 可空引用類型 68
3.7 展望未來 70
3.7.1 可區分聯合 70
3.7.2 活動模式 71
3.8 小結 72
第 4 章 函數式代碼:巧乾勝過苦乾 73
4.1 是時候展現 Func 的魔力了 74
4.1.1 可枚舉對象中的 Func 74
4.1.2 超級簡單的驗證器 75
4.1.3 C# 語言舊版本中的模式匹配 78
4.2 讓字典更有用 82
4.3 對值進行解析 84
4.4 自定義枚舉 86
4.4.1 查詢相鄰元素 86
4.4.2 在滿足條件前持續迭代 89
4.5 小結 91
第 II 部分 深入學習函數式編程
第 5 章 高階函數 95
5.1 問題報告 96
5.2 關於 thunk 99
5.3 鏈式調用函數 102
5.4 分叉組合子 104
5.5 Alt 組合子 106
5.6 組合 108
5.7 關於 Transduce 110
5.8 Tap 函數 112
5.9 try/catch 塊 113
5.10 處理空值 118
5.11 更新可枚舉對象 120
5.12 小結 122
第 6 章 可區分聯合 123
6.1 假日時光 123
6.2 使用可辨識合聯合的旅游團應用 125
6.3 薛定諤的聯合 127
6.4 命名規範 128
6.5 數據庫查詢 131
6.6 發送電子郵件 133
6.7 控制台輸入 134
6.8 泛型聯合 138
6.9 Maybe 類型 138
6.10 Result 類型 139
6.11 對比 Maybe 和 Result 140
6.12 Either 類型 143
6.13 小結 144
第 7 章 函數式流程 145
7.1 再論 Maybe 類型 145
7.1.1 Maybe 類型和調試 150
7.1.2 對比 Map() 函數和 Bind() 函數 151
7.1.3 Maybe 類型和基元類型 152
7.1.4 Maybe 對象和日誌記錄 154
7.1.5 Maybe 對象和 Async 158
7.1.6 Maybe 對象的嵌套 159
7.2 定律 162
7.2.1 左恆等律 162
7.2.2 右恆等律 162
7.2.3 結合律 163
7.3 Reader 單子 164
7.4 State 單子 166
7.5 Maybe 單子與 State 單子 168
7.6 示例:你可能已經用過的單子 169
7.6.1 可枚舉對象 169
7.6.2 Task 170
7.7 其他結構 171
7.8 工作示例 173
7.9 小結 175
第 8 章 柯里化和偏函數 177
8.1 柯里化和大型函數 178
8.2 柯里化和高階函數 182
8.3 在 NET 中使用柯里化 183
8.4 偏函數 185
8.5 在 NET 中實現偏函數 186
8.6 小結 187
第 9 章 不定循環 189
9.1 遞歸 192
9.2 什麽是 Trampolining 194
9.3 自定義迭代器 197
9.3.1 理解枚舉器的結構 198
9.3.2 實現自定義枚舉器 199
9.3.3 循環次數不定的可枚舉對象 201
9.3.4 使用不定迭代器 204
9.4 小結 206
第 10 章 記憶化 207
10.1 貝肯數 207
10.2 在 C# 語言中實現記憶化 212
10.3 小結 214
第 III 部分 走出迷霧
第 11 章 實用函數式 C# 語言 217
11.1 函數式 C# 語言與性能 217
11.1.1 基線:命令式解決方案 219
11.1.2 性能結果 220
11.1.3 確定循環的解決方案 221
11.1.4 不定循環的解決方案 222
11.2 這一切意味著什麽 229
11.3 對函數式 C# 語言的擔憂和疑問 231
11.3.1 函數式代碼應該在代碼庫中占多大比例 231
11.3.2 應該如何構建函數式 C# 語言解決方案 232
11.3.3 如何在不同應用程序之間共享函數式方法 232
11.3.4 這個披薩是你點的嗎 233
11.3.5 如何說服團隊成員也這麽做 233
11.3.6 是否應該在解決方案中包含 F# 項目 235
11.3.7 函數式編程能解決所有問題嗎 235
11.3.8 說到 007,你更喜歡康納利、摩爾還是克雷格 236
11.3.9 如何以函數式思維解決問題 236
11.3.10 如果完全不能通過函數式編程風格的代碼實現我想要的高性能,怎麽辦 237
11.4 小結 237
第 12 章 NuGet 中的現有函數式編程庫 239
12.1 OneOf 庫 240
12.2 LanguageExt 庫 242
12.2.1 Option 243
12.2.2 Either 244
12.2.3 記憶化 245
12.2.4 Reader 246
12.2.5 State 246
12.2.6 LanguageExt 小結 247
12.3 Functional.Maybe 庫 247
12.4 CsharpFunctionalExtensions 庫 249
12.4.1 Maybe 單子 249
12.4.2 Result 250
12.4.3 Fluent Assertions 251
12.4.4 CSharpFunctionalExtensions 小結 251
12.5 F# 編程語言 252
12.6 小結 252
第 13 章 火星之旅 253
13.1 故事 253
13.2 技術細節 254
13.3 創建游戲 256
13.3.1 解決方案 256
13.3.2 通信 257
13.3.3 玩法說明 258
13.3.4 設置物品欄 259
13.3.5 游戲循環 267
13.4 小結 280
第 14 章 結語 283
14.1 讀到這里,你的感受如何 283
14.2 接下來走向何方 284
14.2.1 更多的函數式 C# 語言 284
14.2.2 學習 F# 285
14.2.3 純函數式編程語言 285
14.3 那我呢 286