深入C#函数式编程
深入C#函数式编程
Simon J. Painter
周子衿 译
出版时间:2025年05月
页数:286
“如果你对代码的清晰度和效率孜孜以求,那么这本书将是你不可或缺的随身指南。”
——Gerald Versluis
微软高级软件工程师
经过数十年的低调发展,函数式编程终于迎来了它的春天。它以简单明了、通俗易懂的代码支持异步、并发处理,使得函数式编程的一些精华逐渐融入到传统的面向对象语言之中,如C#语言和Java语言。本书深入浅出,为广大C#程序员揭示了如何巧用函数式编程的特性,而这并不需要重新学习一门全新的语言。
C#语言和F#语言共享着同一个运行时环境,因此在C#语言中也能运用大部分F#的函数式特性。本书详细阐述了如何在C#语言中快速编写函数式代码,无需额外安装依赖项或.NET 3之后的任何新特性。本书可以帮助读者深刻理解为何函数式编程的理念能够立竿见影地提升工作效率。
● 探究函数式编程的内涵及其起源;
● 通过熟悉的语言领略函数式范式的独特魅力;
● 立刻开始在C#中以函数式方式编写代码,摆脱对第三方库的依赖;
● 编写出更加稳定、更少出错、更易于测试的代码;
● 重新审视C#中那些非传统的结构方式;
● 深入探讨在业务环境中应用函数式C#的实用价值。
  1. 第1章 绪论
  2. 1.1 函数式编程是什么
  3. 1.2 函数式编程的特性
  4. 1.2.1 不变性
  5. 1.2.2 高阶函数
  6. 1.2.3 首选表达式而非语句
  7. 1.2.4 基于表达式的编程
  8. 1.2.5 引用透明性
  9. 1.2.6 递归
  10. 1.2.7 真·递归
  11. 1.2.8 模式匹配
  12. 1.2.9 无状态
  13. 1.3 制作蛋糕
  14. 1.3.1 命令式蛋糕
  15. 1.3.2 声明式蛋糕
  16. 1.4 函数式编程的起源
  17. 1.5 还有别的人在用函数式编程吗
  18. 1.5.1 纯函数式语言
  19. 1.5.2 首先学习纯函数式语言是否值得
  20. 1.5.3 F#怎么样?是否有必要学
  21. 1.5.4 多范式语言
  22. 1.6 函数式编程的好处
  23. 1.6.1 简洁
  24. 1.6.2 可测试性
  25. 1.6.3 健壮性
  26. 1.6.4 可预测性
  27. 1.6.5 更好地支持并发
  28. 1.6.6 降低代码噪音
  29. 1.7 函数式编程的最佳应用场景
  30. 1.8 更适合使用其他范式的场景
  31. 1.9 函数式编程能应用到何种程度
  32. 1.10 单子实际上,先不用担心这个
  33. 1.11 小结
  34. 第I部分 我们已经在做的事
  35. 第2章 我们目前能做些什么
  36. 2.1 开始
  37. 2.2 编写第一段函数式代码
  38. 2.2.1 非函数式的电影查询示例
  39. 2.2.2 函数式的电影查询示例
  40. 2.3 以结果为导向的编程
  41. 2.4 可枚举对象
  42. 2.5 首选表达式而非语句
  43. 2.5.1 低调的Select
  44. 2.5.2 合而为一:聚合的艺术
  45. 2.5.3 自定义迭代行为
  46. 2.6 使代码不可变
  47. 2.7 完整的函数式流程
  48. 2.8 更进一步:提升函数式编程技能
  49. 2.9 小结
  50. 第3章 C# 7.0及后续版本的函数式编程
  51. 3.1 元组
  52. 3.2 模式匹配
  53. 3.2.1 银行账户的过程式解决方案
  54. 3.2.2 C# 7.0中的模式匹配
  55. 3.2.3 C# 8.0中的模式匹配
  56. 3.2.4 C# 9.0中的模式匹配
  57. 3.2.5 C# 10.0中的模式匹配
  58. 3.2.6 C# 11.0中的模式匹配
  59. 3.3 只读结构
  60. 3.4 Init-Only Setter
  61. 3.5 记录类型
  62. 3.6 可空引用类型
  63. 3.7 展望未来
  64. 3.7.1 可区分联合
  65. 3.7.2 活动模式
  66. 3.8 小结
  67. 第4章 函数式代码:巧干胜过苦干
  68. 4.1 是时候展现Func的魔力了
  69. 4.1.1 可枚举对象中的Func
  70. 4.1.2 超级简单的验证器
  71. 4.1.3 C#语言旧版本中的模式匹配
  72. 4.2 让字典更有用
  73. 4.3 对值进行解析
  74. 4.4 自定义枚举
  75. 4.4.1 查询相邻元素
  76. 4.4.2 在满足条件前持续迭代
  77. 4.5 小结
  78. 第II部分 深入学习函数式编程
  79. 第5章 高阶函数
  80. 5.1 问题报告
  81. 5.2 关于thunk
  82. 5.3 链式调用函数
  83. 5.4 分叉组合子
  84. 5.5 Alt组合子
  85. 5.6 组合
  86. 5.7 关于Transduce
  87. 5.8 Tap函数
  88. 5.9 try/catch块
  89. 5.10 处理空值
  90. 5.11 更新可枚举对象
  91. 5.12 小结
  92. 第6章 可区分联合
  93. 6.1 假日时光
  94. 6.2 使用可辨识合联合的旅游团应用
  95. 6.3 薛定谔的联合
  96. 6.4 命名规范
  97. 6.5 数据库查询
  98. 6.6 发送电子邮件
  99. 6.7 控制台输入
  100. 6.8 泛型联合
  101. 6.9 Maybe类型
  102. 6.10 Result类型
  103. 6.11 对比Maybe和Result
  104. 6.12 Either类型
  105. 6.13 小结
  106. 第7章 函数式流程
  107. 7.1 再论Mayb 类型
  108. 7.1.1 Maybe类型和调试
  109. 7.1.2 对比Map()函数和Bind()函数
  110. 7.1.3 Maybe类型和基元类型
  111. 7.1.4 Maybe对象和日志记录
  112. 7.1.5 Maybe对象和Async
  113. 7.1.6 Maybe对象的嵌套
  114. 7.2 定律
  115. 7.2.1 左恒等律
  116. 7.2.2 右恒等律
  117. 7.2.3 结合律
  118. 7.3 Reader单子
  119. 7.4 State单子
  120. 7.5 Maybe单子与State单子
  121. 7.6 示例:你可能已经用过的单子
  122. 7.6.1 可枚举对象
  123. 7.6.2 Task
  124. 7.7 其他结构
  125. 7.8 工作示例
  126. 7.9 小结
  127. 第8章 柯里化和偏函数
  128. 8.1 柯里化和大型函数
  129. 8.2 柯里化和高阶函数
  130. 8.3 在 NET中使用柯里化
  131. 8.4 偏函数
  132. 8.5 在 NET中实现偏函数
  133. 8.6 小结
  134. 第9章 不定循环
  135. 9.1 递归
  136. 9.2 什么是Trampolining
  137. 9.3 自定义迭代器
  138. 9.3.1 理解枚举器的结构
  139. 9.3.2 实现自定义枚举器
  140. 9.3.3 循环次数不定的可枚举对象
  141. 9.3.4 使用不定迭代器
  142. 9.4 小结
  143. 第10章 记忆化
  144. 10.1 贝肯数
  145. 10.2 在C#语言中实现记忆化
  146. 10.3 小结
  147. 第III部分 走出迷雾
  148. 第11章 实用函数式C#语言
  149. 11.1 函数式C#语言与性能
  150. 11.1.1 基线:命令式解决方案
  151. 11.1.2 性能结果
  152. 11.1.3 确定循环的解决方案
  153. 11.1.4 不定循环的解决方案
  154. 11.2 这一切意味着什么
  155. 11.3 对函数式C#语言的担忧和疑问
  156. 11.3.1 函数式代码应该在代码库中占多大比例
  157. 11.3.2 应该如何构建函数式C#语言解决方案
  158. 11.3.3 如何在不同应用程序之间共享函数式方法
  159. 11.3.4 这个披萨是你点的吗
  160. 11.3.5 如何说服团队成员也这么做
  161. 11.3.6 是否应该在解决方案中包含F#项目
  162. 11.3.7 函数式编程能解决所有问题吗
  163. 11.3.8 说到007,你更喜欢康纳利、摩尔还是克雷格
  164. 11.3.9 如何以函数式思维解决问题
  165. 11.3.10 如果完全不能通过函数式编程风格的代码实现我想要的高性能,怎么办
  166. 11.4 小结
  167. 第12章 NuGet中的现有函数式编程库
  168. 12.1 OneOf库
  169. 12.2 LanguageExt库
  170. 12.2.1 Option
  171. 12.2.2 Either
  172. 12.2.3 记忆化
  173. 12.2.4 Reader
  174. 12.2.5 State
  175. 12.2.6 LanguageExt小结
  176. 12.3 Functional.Maybe库
  177. 12.4 CsharpFunctionalExtensions库
  178. 12.4.1 Maybe单子
  179. 12.4.2 Result
  180. 12.4.3 Fluent Assertions
  181. 12.4.4 CSharpFunctionalExtensions小结
  182. 12.5 F#编程语言
  183. 12.6 小结
  184. 第13章 火星之旅
  185. 13.1 故事
  186. 13.2 技术细节
  187. 13.3 创建游戏
  188. 13.3.1 解决方案
  189. 13.3.2 通信
  190. 13.3.3 玩法说明
  191. 13.3.4 设置物品栏
  192. 13.3.5 游戏循环
  193. 13.4 小结
  194. 第14章 结语
  195. 14.1 读到这里,你的感受如何
  196. 14.2 接下来走向何方
  197. 14.2.1 更多的函数式C#语言
  198. 14.2.2 学习F#
  199. 14.2.3 纯函数式编程语言
  200. 14.3 那我呢
书名:深入C#函数式编程
作者:Simon J. Painter
译者:周子衿 译
国内出版社:清华大学出版社
出版时间:2025年05月
页数:286
书号:978-7-302-68015-4
原版书书名:Functional Programming with C#
原版书出版商:O'Reilly Media
Simon J. Painter
 
Simon J. Painter,拥有20年专业开发经验,对.NET各个版本在各个行业的应用非常熟悉。他活跃于.NET用户组和行业会议,以演讲嘉宾的方式与业内广大开发人员分享函数式编程和.NET常见开发话题。西蒙与他的妻子和孩子居住在英国。
 
 
《深入C#函数式编程》封面上的动物是东部郊狼。
东部郊狼是居住在美洲的19种郊狼亚种之一,实际上是东部狼、郊狼和家犬的杂交品种,因此它的体型比西部郊狼更大,平均体重在20.4公斤到24.9公斤之间。东部郊狼的领地范围更为广阔,遍布美国东部和加拿大的大部分地区,从东海岸的纽芬兰和拉布拉多地区一直延伸到南部的乔治亚州。
作为一种机会主义型的杂食性动物,东部郊狼以可获得的任何食物为食,觅食对象范围从蚱蜢到驼鹿不等。它们通常以小家庭(由一对成年郊狼和幼崽组成)的方式生活和捕猎,不过如果有幸在夜间听到它们嚎叫,你可能会以为它们是群体狩猎者,就像它们其他的狼亲戚那样:在必要时,东部郊狼能够制造出相当喧闹的声音(https://oreil.ly/IGHUv)!
尽管全球人口在持续增长,但郊狼目前并不属于濒危物种,至少从生态保护的角度来看是这样的。不过,O’Reilly书籍封面上显示的许多动物都是濒危物种,因为每个物种对这个世界的生态平衡都极为重要。
购买选项
定价:119.00元
书号:978-7-302-68015-4
出版社:清华大学出版社