| ISBN | 出版时间 | 包装 | 开本 | 页数 | 字数 |
|---|---|---|---|---|---|
| 未知 | 暂无 | 暂无 | 未知 | 0 | 暂无 |
● 第 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