深入C 函数式编程 9787302680154

配送至
$ $ USD 美元

开本:16开
纸张:胶版纸
包装:平装-胶订
是否套装:否
国际标准书号ISBN:9787302680154
所属分类:图书>计算机/网络>程序设计>CC++C#VCVC++
年专业开发经验分享,文风通俗易懂,案例生动有趣,深入介绍如何借助 语言和函数式编程来增强代码的可读性和可维护性以及提高代码的质量

编辑推荐

经过数十年的低调发展,函数式编程终于迎来了它的春天。它以简单明了、通俗易懂的代码支持异步、并发处理,使得函数式编程的一些精华逐渐融入到传统的面向对象语言之中,如语言和语言。《深入函数式编程》深入浅出,为广大程序员揭示了如何巧用函数式编程的特性,而这并不需要重新学习一门全新的语言。
语言和语言共享着同一个运行时环境,因此在语言中也能运用大部分的函数式特性。《深入函数式编程》详细阐述了如何在语言中快速编写函数式代码,无需额外安装依赖项或之后的任何新特性。《深入函数式编程》可以帮助读者深刻理解为何函数式编程的理念能够立竿见影地提升工作效率。
● 探究函数式编程的内涵及其起源;
● 通过熟悉的语言领略函数式范式的独特魅力;
● 立刻开始在中以函数式方式编写代码,摆脱对第三方库的依赖;
● 编写出更加稳定、更少出错、更易于测试的代码;
● 重新审视中那些非传统的结构方式;
● 深入探讨在业务环境中应用函数式的实用价值。

前 言
我经常参加开发者大会。从这些会议中,我观察到函数式编程( ,)的讨论热度似乎一年高过一年。许多会议都有一个专门讨论函数式编程的分论坛,并且其他演讲中多少也会提到这个主题。
函数式编程的重要性正在稳步上升,这背后有哪些原因呢?
原因在于,函数式编程是软件开发史上最伟大的创新之一。它不仅很酷,还充满了乐趣。
随着容器化和无服务器应用等概念的兴起,函数式编程不再只是开发者的业余爱好,也不是那种几年后就被人遗忘的短暂热潮,而是成为一个能为利益相关者带来实质性好处的重要概念。
此外,在 生态系统中,函数式编程的推广还得益于一些关键因素。例如 语言的首席设计师马德斯·托格森,他是函数式编程的忠实拥趸,同时也是将函数式编程引入 的主要推动者之一。另外,作为 家族中的函数式编程语言, 语言的影响也不容忽视。 与 共享同一个运行时环境,所以 团队开发的许多函数式特性往往也会以某种形式集成到 语言中。我经常参加开发者大会。从这些会议中,我观察到函数式编程( ,)的讨论热度似乎一年高过一年。许多会议都有一个专门讨论函数式编程的分论坛,并且其他演讲中多少也会提到这个主题。
函数式编程的重要性正在稳步上升,这背后有哪些原因呢?
原因在于,函数式编程是软件开发史上最伟大的创新之一。它不仅很酷,还充满了乐趣。
随着容器化和无服务器应用等概念的兴起,函数式编程不再只是开发者的业余爱好,也不是那种几年后就被人遗忘的短暂热潮,而是成为一个能为利益相关者带来实质性好处的重要概念。
此外,在 生态系统中,函数式编程的推广还得益于一些关键因素。例如 语言的首席设计师马德斯·托格森,他是函数式编程的忠实拥趸,同时也是将函数式编程引入 的主要推动者之一。另外,作为 家族中的函数式编程语言, 语言的影响也不容忽视。 与 共享同一个运行时环境,所以 团队开发的许多函数式特性往往也会以某种形式集成到 语言中。
然而,一个重要的问题仍然存在:函数式编程究竟是什么?我是不是需要学习一门全新的编程语言才能使用它?好消息是,如果你是一名 开发者,那就不需要为了紧跟潮流而花费大量业余时间来学习新技术,也不需要引入新的第三方库来增加应用程序的依赖:有了开箱即用()的 代码,即可实现函数式编程,为此,我们只需要做一些小小的调整。
本书介绍函数式编程的基本概念、展现其优势并说明如何在 语言中实现它们—学习这些知识不仅能满足你的个人编程爱好,而且能为你的工作带来立竿见影的好处。具体有以下几个好处:
● 代码更加清晰、整洁且易于理解;
● 代码库更容易维护;
● 减少应用程序中未处理的异常,避免它们所带来的不可预测的后果;
● 能更轻松地为代码库编写自动化单元测试。
除此之外,还有其他很多的好处,此处不再赘述。
谁应该阅读本书
无论是专业开发人员、学生还是编程爱好者,只要已经掌握 语言的基础知识,就适合阅读这本书。虽然不要求你达到专家水平,但最好熟悉 语言的基础知识,并且至少能够独立编写简单的 应用程序。
因为书中涵盖了一些更高级的 知识,所以在谈到这些知识时,我会对它们进行详细说明。
本书尤其针对以下几类读者提供了相应的内容:
● 如果你已经掌握 语言的基础知识,但为了编写出更好、更健壮的代码而想通过学习更高级的技术来进一步实现自我提升,就可以从本书中找到实用的,有价值的内容;
● 如果你是 开发者,听说过函数式编程甚至对它有一定的了解,并且想知道如何在 语言中采用这样的编码风格,就可以通过本书开启新的征程;
● 如果你是 开发者,希望继续使用熟悉的函数式编程工具,就可以通过本书了解相关细节;
● 如果你是从其他支持函数式编程的语言(如 语言)转向 平台的开发者,就可以发现这本书是一个宝贵的资源;
● 如果你是真心热爱编程的人,在办公室里写了一天代码回到家后还会出于兴趣写一写自己的应用,就可以发现本书相当适合你。
本书写作动机
我从小就对编程有浓厚的兴趣。小的时候,我家里有一台 ,这是一款 在 世纪 年代初开发的家用电脑。熟悉 的人,或许觉得 似曾相识,但相比之下,它更古老。 只支持 种颜色和 × 的屏幕分辨率。(它有 种基本颜色,每种颜色都有一个亮色版本。不过,其中一个颜色是黑色,而它并不存在亮色版本。所以,总共是 种颜色。)我用的是有 内存的高级型号,而我父亲用的是更老的 型号,内存仅有 ,键盘则是橡胶材质。它甚至无法显示彩色的游戏角色,只有屏幕上的色块,因此游戏中的人物角色会根据背景的颜色而改变颜色。总而言之,在当时,它们真的很酷!
最让人兴奋的是,它的操作系统实际上是一个文本编程界面。我需要输入代码来加载游戏(使用 命令从磁盘加载)。当时市面上有一些专门针对孩子的包含游戏代码的杂志和书籍,正是这些资料培育了我对计算机代码的热爱。
在此,我要特别向 表示感谢!
在我大约 岁的时候,学校电脑上的一个就业指导程序建议我考虑软件开发作为职业。那时我才第一次意识到,这个不太正经的爱好原来可以转为谋生的手段!
大学毕业后,我决定找一份正式的工作,当时是我第一次接触 语言。就这样,我顺理成章地设定了下一个目标:找到恰当的编写代码的方式。这听起来很简单,对吧?但老实说,在差不多 年之后,我在努力,还没有实现这个目标。
我个人编程生涯的关键转来自在挪威召开的一次开发者大会。那次大会后,我终于理解了我所熟悉的函数式编程究竟是什么。函数式编程的代码非常优雅和简洁,而且容易理解,这是其他编程风格难以企及的。虽然和其他类型的编程风格一样,采用函数式编程仍然可能编写出结构欠佳的代码,但函数式编程给我带来了一种前所未有的体验,让我觉得自己终于找到了一种“恰当”的编程方式。希望你在阅读这本书后,不仅认同我这个观点,而且还会被这个充满无限可能的编程世界深深吸引。
本书导航
本书的结构如下。
● 第 章是绪论,介绍如何立即开始使用 语言进行函数式编程,不需要我们导入任何新的 包、使用第三方库或者对 语言进行特殊处理。这一章的所有示例几乎都适用于 及以后的版本。完成第 章的学习,你将迈出第一步,开始你的函数式编程之旅,这一章的所有代码都相对简单,是本书后续内容的基础。
● 第 部分“我们已经在做的事”(第 章到第 章),探讨如何将函数式编程的一些理念自然融入 编程中,不需要进行任何根本性的改变。在这一部分中,许多代码示例都直接使用标准 语言来实现。
如果你之前从未听说过函数式编程而想要循序渐进地入门,那么这部分将是很好的起点。打个比方,这就像是游泳前轻轻地将脚浸入水中,看自己是否对下水游泳感兴趣。
● 第 部分“深入函数式编程”(第 章到第 章),标志着进入“深水区”,要介绍一些“真正”的函数式编程概念。不过别担心,我会一一拆解这些概念,由浅入深地进行讲解。
● 第 部分“走出迷雾”(第 章到第 章),总结并巩固前面所学的知识,并介绍其他一些值得研的领域。
随意挑选自己最感兴趣的部分开始阅读。这本书不是小说,(但是,假如把这本书比作小说,那么我保证它会是一部谋杀悬疑小说,而且凶手肯定是管家!)请按照自己觉得最合适的顺序阅读。
排版约定
本书使用的排版约定如下。
粗体
表示新术语、、电子邮件地址、文件名和文件扩展名。
等宽字体
表示程序代码和段落内的程序元素,如变量名、函数名、数据库、数据类型、环境变量、语句和关键字等。
这个图标代表一般性的补充说明。
这个图标代表警告或需要注意的事项。
使用代码示例
本书的补充材料(包括代码示例、练习等)可以参见 。
如果在使用代码示例时遇到技术问题或有其他疑问,请通过以下电子邮件地址联系我们:。
这本书旨在帮助你学习。一般来说,除非计划大量复制或使用书中的代码,否则可以随意在自己的程序和文档中应用本书提供的示例代码,无需事先征得我们的同意。举例来说,编写一个包含书中多个代码片段的程序不需要特别许可。
但是,若要出售或分发 书籍中的示例代码,则必须获得我们的正式许可。引用本书和书中的示例代码来回答问题不需要特别许可,但是,如果在你的产品文档中大量引用了本书的示例代码,就需要获得正式许可。
虽然不是强制性要求,但我们总是欢迎并感激任何对书籍归属的标注。书籍归属应包含书名、作者、出版社和 号。例如:“ ”。
如果认为自己使用代码示例的方式可能超出了合理使用范围或上述许可范围,请随时通过以下邮箱联系我们:。
在线学习平台( )
近 年来, 致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。
我们拥有独一无二的专家和革新者组成的庞大网络,他们通过图书、文章、会议和我们的在线学习平台分享他们的知识和经验。 的在线学习平台允许你按需访问现场培训课程、深入的学习路径、交互式编程环境,以及 和 多家其他出版商提供的大量文本和视频资源。有关的更多信息,请访问。
联系我们
请把对本书的评价和问题发给出版社。
美国:

致谢
首先要感谢凯瑟琳·多拉德。几年前,她在奥斯陆举办的一次挪威开发者大会()上发表了一场演讲,题为“ 语言的函数式编程技巧”,那是我第一次真正接触函数式编程,它为我打开了一扇通往美丽新世界的大门()。
在这段探索之旅中,对我而言,恩里科·布奥南诺也是一名重要的导师。通过阅读他的著作《 函数式编程:写出更优质的 代码》,我理解了一些复杂的函数式概念的运作方式。如果你对我的这本书感兴趣,那么我强烈推荐你同时再读一读他的那本。
感谢阅读本书早期草稿并提供宝贵反馈的人,包括伊恩·拉塞尔、马修·弗莱彻、利亚姆·莱利、马克斯·迪特泽、史蒂夫·柯林斯、赫拉尔多·李斯、马特·伊兰、拉胡尔·纳特、西瓦·古迪瓦达、克里斯蒂安·霍斯达尔、马丁·福斯、戴夫·麦克洛、塞巴斯蒂安·罗宾斯、大卫·谢弗、彼得·德·坦德、马克·西曼、杰拉尔德·弗斯鲁斯、亚历克斯·怀尔德、瓦拉迪斯·诺瓦科维茨、莱克纳·莱因哈德、埃里克·卢卡斯、克里斯托弗·斯特拉滕、凯瑟琳·多拉德以及斯科特·瓦斯欣。在此向大家一并致谢!
还要特别感谢我的编辑吉尔·伦纳德。在过去一年,她对我的包容始终犹如海纳百川,感谢她的耐心。
显示全部信息

目 录
● 第 章 绪论
● 第 部分 我们已经在做的事
● 第 章 我们目前能做些什么
● 第 章 及后续版本的函数式编程
● 第 章 函数式代码:巧干胜过苦干
● 第 部分 深度学习函数式编程
● 第 章 高阶函数
● 第 章 可区分联合
● 第 章 函数式流程
● 第 章 柯里化和偏函数
● 第 章 不定循环
● 第 章 记忆化
● 第 部分 走出迷雾
● 第 章 实用函数式 语言 ● 第 章 绪论
● 第 部分 我们已经在做的事
● 第 章 我们目前能做些什么
● 第 章 及后续版本的函数式编程
● 第 章 函数式代码:巧干胜过苦干
● 第 部分 深度学习函数式编程
● 第 章 高阶函数
● 第 章 可区分联合
● 第 章 函数式流程
● 第 章 柯里化和偏函数
● 第 章 不定循环
● 第 章 记忆化
● 第 部分 走出迷雾
● 第 章 实用函数式 语言
● 第 章 中的现有函数式编程库
● 第 章 火星之旅
● 第 章 结语
详细目录
第 章 绪论
函数式编程是什么
函数式编程的特性
不变性
高阶函数
首选表达式而非语句
基于表达式的编程
引用透明性
递归
真·递归
模式匹配
无状态
制作蛋糕
命令式蛋糕
声明式蛋糕
函数式编程的起源
还有别的人在用函数式编程吗
纯函数式语言
首先学习纯函数式语言是否值得
怎么样?是否有必要学
多范式语言
函数式编程的好处
简洁
可测试性
健壮性
可预测性
更好地支持并发
降低代码噪音
函数式编程的最佳应用场景
更适合使用其他范式的场景
函数式编程能应用到何种程度
单子实际上,先不用担心这个
小结
第 部分 我们已经在做的事
第 章 我们目前能做些什么
开始
编写第一段函数式代码
非函数式的电影查询示例
函数式的电影查询示例
以结果为导向的编程
可枚举对象
首选表达式而非语句
低调的
合而为一:聚合的艺术
自定义迭代行为
使代码不可变
完整的函数式流程
更进一步:提升函数式编程技能
小结
第 章 及后续版本的函数式编程
元组
模式匹配
银行账户的过程式解决方案
中的模式匹配
中的模式匹配
中的模式匹配
中的模式匹配
中的模式匹配
只读结构

记录类型
可空引用类型
展望未来
可区分联合
活动模式
小结
第 章 函数式代码:巧干胜过苦干
是时候展现 的魔力了
可枚举对象中的
超级简单的验证器
语言旧版本中的模式匹配
让字典更有用
对值进行解析
自定义枚举
查询相邻元素
在满足条件前持续迭代
小结
第 部分 深入学习函数式编程
第 章 高阶函数
问题报告
关于
链式调用函数
分叉组合子
组合子
组合
关于
函数

处理空值
更新可枚举对象
小结
第 章 可区分联合
假日时光
使用可辨识合联合的旅游团应用
薛定谔的联合
命名规范
数据库查询
发送电子邮件
控制台输入
泛型联合
类型
类型
对比 和
类型
小结
第 章 函数式流程
再论 类型
类型和调试
对比 函数和 函数
类型和基元类型
对象和日志记录
对象和
对象的嵌套
定律
左恒等律
右恒等律
结合律
单子
单子
单子与 单子
示例:你可能已经用过的单子
可枚举对象

其他结构
工作示例
小结
第 章 柯里化和偏函数
柯里化和大型函数
柯里化和高阶函数
在 中使用柯里化
偏函数
在 中实现偏函数
小结
第 章 不定循环
递归
什么是
自定义迭代器
理解枚举器的结构
实现自定义枚举器
循环次数不定的可枚举对象
使用不定迭代器
小结
第 章 记忆化
贝肯数
在 语言中实现记忆化
小结
第 部分 走出迷雾
第 章 实用函数式 语言
函数式 语言与性能
基线:命令式解决方案
性能结果
确定循环的解决方案
不定循环的解决方案
这一切意味着什么
对函数式 语言的担忧和疑问
函数式代码应该在代码库中占多大比例
应该如何构建函数式 语言解决方案
如何在不同应用程序之间共享函数式方法
这个披萨是你点的吗
如何说服团队成员也这么做
是否应该在解决方案中包含 项目
函数式编程能解决所有问题吗
说到 ,你更喜欢康纳利、摩尔还是克雷格
如何以函数式思维解决问题
如果完全不能通过函数式编程风格的代码实现我想要的高性能,怎么办
小结
第 章 中的现有函数式编程库



记忆化

小结


单子

小结
编程语言
小结
第 章 火星之旅
故事
技术细节
创建游戏
解决方案
通信
玩法说明
设置物品栏
游戏循环
小结
第 章 结语
读到这里,你的感受如何
接下来走向何方
更多的函数式 语言
学习
纯函数式编程语言
那我呢
显示全部信息

作者简介

西蒙·潘特( )拥有年专业开发经验,对各个版本在各个行业的应用非常熟悉。他活跃于用户组和行业会议,以演讲嘉宾的方式与业内广大开发人员分享函数式编程和常见开发话题。西蒙与他的妻子和孩子居住在英国。
微软,自年以来,一直深耕于软件开发领域,使用过的每一个版本。他在很多不同的行业中工作过。日常工作之余,他喜欢参加用户小组和会议,经常在会上发表函数式编程和相关主题的演讲。小时候读懂父亲的 手册之后,西蒙就成了一名编程爱好者。除了编程,他还喜欢玩音乐、玩填字游戏、玩《战斗幻想》以及痛饮咖啡——虽然明知对健康没有什么好处。目前,他和妻子、女儿生活在英国的一个小镇上。