Go 函数式编程实战-目录
序
致谢
前言
关于本书
关于作者
- 函数式编程简介
1.1 函数概述
1.2 什么是函数式编程
1.3 函数式编程特性
1.3.1 函数是一等公民
1.3.2 纯函数
1.3.3 无状态
1.3.4 无副作用
1.3.5 惰性求值
1.3.6 不可变数据
1.4 函数式编程的优点
1.4.1 代码简洁易读
1.4.2 并发和同步
1.4.3 持续优化
1.5 Go作为函数式编程语言的进化
1.6 范式转变:用函数思维思考问题
1.6.1 过程式编程范式
1.6.2 面向对象编程范式
1.6.3 函数式编程范式
1.6.4 命令式与声明式编程
1.7 本章总结 - Go 函数式编程之旅
2.1 声明一个简单函数
2.2 函数作为一等公民
2.3 函数字面量
2.4 高阶函数
2.4.1 函数的组合
2.4.2 输入一个函数入参
2.4.3 返回一个函数出参
2.4.4 编写自己的高阶函数
2.5 Lambda
2.6 匿名函数
2.7 闭包
2.8 函数柯里化
2.9 过滤和映射
2.10 管道模式
2.11 接收函数
2.12 本章总结 - 递归
3.1 递归概述
3.2 递归实例
3.2.1 计算阶乘
3.2.2 斐波那契数列
3.3 尾调用优化
3.4 Y 组合子
3.4.1 不动点
3.4.2 Go 实现 Y 组合子
3.5 本章总结 - 函数类型与类型系统
4.1 函数和函数类型
4.2 自动推断返回值类型
4.3 函数指针
4.4 创建通用函数对象
4.5 本章总结 - 纯函数:避免可变状态
5.1 可变状态带来的问题
5.2 纯函数和引用透明
5.3 无副作用编程
5.4 并发环境中的状态
5.5 函数式编程与并发编程
5.6 本章总结 - 惰性求值
6.1 通道
6.2 惰性作为一种优化技术
6.3 集合惰性排序
6.4 惰性序列:通过缓存函数结果修剪递归树
6.5 动态编程作为惰性形式
6.6 表达式模板与惰性字符串拼接
6.7 纯洁性与表达式模板
6.8 本章总结 - 不可变数据结构
7.1 值拷贝
7.2 指针
7.3 为什么使用不可变数据结构
7.4 不可变编程实践
7.4.1 在函数中使用值拷贝替代指针
7.4.2 减少全局或外部状态中的依赖性
7.5 本章总结 - 流
8.1 迭代器实现
8.2 collect
8.3 map
8.4 filter
8.5 flatMap
8.6 max和min
8.7 reduce
8.8 sort
8.9 流与管道模式:多次调用流操作
8.10 并行化流操作
8.11 本章总结 - 测试与调试
9.1 编译你的程序
9.2 单元测试与纯函数
9.3 自动生成测试
9.4 产生测试用例
9.5 基于规则的测试
9.6 比较测试
9.7 函数模拟测试: gomock 测试实战
9.8 本章总结
内容简介
《Go 函数式编程实战》介绍了Go的面向函数式编程。面向函数式编程是继面向对象编程之后又一编程范式,解决了命令式(过程式)编程与面向对象编程中出现的问题,是一种极具潜力的编程方式,值得研究学习。主要讲解了函数对象、纯洁性(Purity)、惰性求值、range、函数式数据结构、流、并发的函数式设计,以及测试与调试等有关内容,还介绍了使用原有函数创建新函数的知识。
《Go函数式编程实战》不仅可以作为Go程序员、编程爱好者以及软件工程师学习函数式编程的参考书,还可以作为高等院校Go编程语言的高级教材。
序
编程是一门罕见的学科,通过它可以从无到有地创建一些东西。程序员可以使用自己的思想和创造力构建想要的东西,唯一需要的就是一台电脑。
我在上学的时候,大部分的编程课集中于命令式编程——首先是面向过程的C 语言,然后是面向对象编程的C++和Java等。在我的大学里情况也没有太大的改变——主要的编程思想还是面向对象的编程(OOP)。
在之前的很久的一段时间里,我一直认为所有的编程语言,在概念上都是相同的——都是声明,赋值,if-else, for loop 等,只不过语法不同.在学习了某种语言的基础之后,如循环和分支,通过很小的调整就可以编写其他程序。直到我在工作学习中真正用到函数式编程(Java 8 的 Lambda, Stream API, Kotlin 的 higher order fun 等),我开始学着用函数式风格的结构简化面向对象代码的工作。并开始投入大量的时间研究函数式编程语言,如 Lisp, Haskell, Scala 和 Erlang等。我惊奇地发现,使面向对象程序员头痛不已的问题,换个角度——以函数式风格思考——就迎刃而解了.
我目前的工作主要使用Go,所以必须寻找一种方式用 Go 进行函数式编程。事实证明,这样的人并非只有我一个,世界上到处都是具有类似想法的人。如果有人写一本Go函数式编程的书,那就太棒了。但问题是,所有人都让别人来写,因为我们都需要从实际项目中寻找思想的源泉。Go 语言自 2009 年诞生到现在已经有十几个年头了, 但是关于Go函数式编程的书却少之又少。于是我决定接受机械工业出版社的邀请,并开始了著书的旅程,于是就有了你看到的这本书。
网友评论