书籍详情
JavaScript ES8函数式编程实践入门(第2版)
作者:[印] 安托·阿拉文思(Anto Aravinth) 著,梁平 译
出版社:清华大学出版社
出版时间:2022-03-01
ISBN:9787302597773
定价:¥59.80
购买这本书可以去
内容简介
主要内容 ● 探讨函数式编程的概念,如字符串填充和异步函数 ● 解析如何在JavaScript中处理函数 ● 创建一个函数库来模拟underscore.js ● 深入探讨ES8的新特性,如扩展运算符和Generator ● 遵循函数范式,创建一个工作方式类似于react-redux模式的库
作者简介
Anto Aravinth从事软件行业已经6年多了。他开发了许多用新技术编写的系统。Anto了解JavaScript的基础知识及其工作方式,并培训了许多人。Anto在业余时间也做OSS,他喜欢打乒乓球。 Srikanth Machiraju作为开发人员、架构师、技术培训师和社区发言人,拥有超过10年的工作经验。他目前在Microsoft Hyderabad担任高级顾问,领导一个由100名开发人员和质量分析师组成的团队,为石油行业的科技巨头开发一个先进的云计算平台。他的目标是成为一名企业架构师,能够智能设计超大规模的现代应用程序,不断学习和分享使用前沿平台和技术的现代应用程序开发策略。在加入Microsoft前,他曾在BrainScale担任企业培训师和高级技术分析师,负责应用程序设计、开发,并使用Azure进行迁移。他是一名精通技术的开发人员,热衷于拥抱新技术,并通过博客和社区分享他的学习历程。他还撰写了题为“Learning Windows Server Containers”(学习Windows服务器容器)和“Developing Bots with Microsoft Bot Framework”(用Microsoft机器人框架开发机器人)的博客文章。
目录
第1章 函数式编程简介 1
1.1 什么是函数式编程?它为何重要 1
1.2 引用透明性 4
1.3 命令式、声明式与抽象 5
1.4 函数式编程的好处 6
1.5 纯函数 7
1.5.1 纯函数生成可测试的代码 7
1.5.2 合理的代码 9
1.6 并发代码 10
1.7 可缓存 11
1.8 管道与组合 12
1.9 纯函数是数学函数 13
1.10 我们要构建什么 14
1.11 JavaScript是函数式编程语言吗 15
1.12 小结 15
第2章 JavaScript函数基础 17
2.1 ECMAScript历史 18
2.2 创建并执行函数 18
2.2.1 第一个函数 19
2.2.2 严格模式 21
2.2.3 return语句是可选的 22
2.2.4 多语句函数 22
2.2.5 函数参数 23
2.2.6 ES5函数在ES6及更高版本中是有效的 24
2.3 设置项目 24
2.3.1 初始设置 24
2.3.2 用第一个函数式方法处理循环问题 26
2.3.3 export要点 28
2.3.4 import要点 28
2.3.5 使用babel-node运行代码 29
2.3.6 在npm中创建脚本 29
2.3.7 从git上运行源代码 30
2.4 小结 31
第3章 高阶函数 33
3.1 理解数据 34
3.1.1 理解JavaScript数据类型 34
3.1.2 存储函数 35
3.1.3 传递函数 35
3.1.4 返回函数 37
3.2 抽象和高阶函数 38
3.2.1 抽象的定义 38
3.2.2 通过高阶函数实现抽象 39
3.3 实用的高阶函数 42
3.3.1 every函数 43
3.3.2 some函数 44
3.3.3 sort函数 45
3.4 小结 49
第4章 闭包与高阶函数 51
4.1 理解闭包 52
4.1.1 什么是闭包 52
4.1.2 记住闭包生成的位置 54
4.1.3 回顾sortBy函数 55
4.2 实用的高阶函数(续) 56
4.2.1 tap函数 56
4.2.2 unary函数 57
4.2.3 once函数 59
4.2.4 memoized函数 60
4.2.5 assign函数 62
4.3 小结 64
第5章 数组的函数式编程 65
5.1 数组的函数式方法 66
5.1.1 map 66
5.1.2 filter 70
5.2 连接操作 71
5.3 reduce函数 76
5.4 zip数组 82
5.5 小结 86
第6章 柯里化与偏应用 87
6.1 一些术语 88
6.1.1 一元函数 88
6.1.2 二元函数 88
6.1.3 变参函数 88
6.2 柯里化 90
6.2.1 柯里化用例 91
6.2.2 日志函数:应用柯里化 93
6.2.3 回顾柯里化 94
6.2.4 回顾日志函数 97
6.3 柯里化实战 99
6.3.1 在数组内容中查找数字 99
6.3.2 求数组的平方 100
6.4 数据流 100
6.4.1 偏应用 101
6.4.2 实现偏函数 101
6.4.3 柯里化与偏应用技术 104
6.5 小结 104
第7章 组合与管道 107
7.1 组合的概念 108
7.2 函数式组合 110
7.2.1 回顾map与filter 110
7.2.2 compose函数 112
7.3 应用compose函数 113
7.3.1 引入curry与partial 114
7.3.2 组合多个函数 117
7.4 管道/序列 119
7.5 组合的优势 120
7.5.1 组合满足结合律 120
7.5.2 管道操作符 121
7.5.3 使用tap函数调试 124
7.6 小结 124
第8章 函子 127
8.1 什么是函子 128
8.1.1 函子是容器 128
8.1.2 实现map方法 130
8.2 MayBe函子 132
8.2.1 实现MayBe函子 132
8.2.2 简单用例 133
8.2.3 真实用例 135
8.3 Either函子 140
8.3.1 实现Either函子 140
8.3.2 Reddit例子的Either版本 142
8.4 Pointed函子 145
8.5 小结 145
第9章 深入理解Monad 147
9.1 根据搜索词条获取Reddit评论 148
9.2 问题描述 148
9.2.1 实现第一步 150
9.2.2 合并Reddit调用 153
9.2.3 多个map的问题 157
9.3 通过join解决问题 158
9.3.1 实现join 158
9.3.2 实现chain 161
9.3.3 什么是Monad 163
9.4 小结 164
第10章 使用Generator暂停、恢复和异步 165
10.1 异步代码及其问题 166
10.2 Generator 101 168
10.2.1 创建Generator 168
10.2.2 Generator的注意事项 169
10.2.3 yield关键字 170
10.2.4 Generator的done属性 172
10.2.5 向Generator传递数据 174
10.3 使用Generator处理异步调用 176
10.3.1 一个简单的案例 176
10.3.2 一个真实的案例 181
10.4 ECMAScript 2017中的异步函数 185
10.4.1 Promise 185
10.4.2 await 186
10.4.3 async 186
10.4.4 链式回调 187
10.4.5 异步调用中的错误处理 189
10.4.6 异步函数转化为Generator 190
10.5 小结 192
第11章 构建React-Like库 193
11.1 不可变性 194
11.2 构建简单的Redux库 196
11.3 构建一个类似于HyperApp的框架 201
11.3.1 虚拟DOM 202
11.3.2 JSX 203
11.3.3 JS Fiddle 204
11.3.4 createActions 208
11.3.5 render 209
11.3.6 patch 210
11.3.7 update 211
11.3.8 merge 212
11.3.9 remove 212
11.4 小结 214
第12章 测试与总结 215
12.1 介绍 216
12.2 测试的类型 217
12.3 BDD和TDD 218
12.4 JavaScript测试框架 219
12.4.1 使用Mocha进行测试 220
12.4.2 使用Sinon进行模拟 226
12.4.3 使用Jasmine进行测试 229
12.5 代码覆盖率 231
12.6 linting 232
12.7 单元测试库代码 234
12.8 最后的想法 236
12.9 小结 237
1.1 什么是函数式编程?它为何重要 1
1.2 引用透明性 4
1.3 命令式、声明式与抽象 5
1.4 函数式编程的好处 6
1.5 纯函数 7
1.5.1 纯函数生成可测试的代码 7
1.5.2 合理的代码 9
1.6 并发代码 10
1.7 可缓存 11
1.8 管道与组合 12
1.9 纯函数是数学函数 13
1.10 我们要构建什么 14
1.11 JavaScript是函数式编程语言吗 15
1.12 小结 15
第2章 JavaScript函数基础 17
2.1 ECMAScript历史 18
2.2 创建并执行函数 18
2.2.1 第一个函数 19
2.2.2 严格模式 21
2.2.3 return语句是可选的 22
2.2.4 多语句函数 22
2.2.5 函数参数 23
2.2.6 ES5函数在ES6及更高版本中是有效的 24
2.3 设置项目 24
2.3.1 初始设置 24
2.3.2 用第一个函数式方法处理循环问题 26
2.3.3 export要点 28
2.3.4 import要点 28
2.3.5 使用babel-node运行代码 29
2.3.6 在npm中创建脚本 29
2.3.7 从git上运行源代码 30
2.4 小结 31
第3章 高阶函数 33
3.1 理解数据 34
3.1.1 理解JavaScript数据类型 34
3.1.2 存储函数 35
3.1.3 传递函数 35
3.1.4 返回函数 37
3.2 抽象和高阶函数 38
3.2.1 抽象的定义 38
3.2.2 通过高阶函数实现抽象 39
3.3 实用的高阶函数 42
3.3.1 every函数 43
3.3.2 some函数 44
3.3.3 sort函数 45
3.4 小结 49
第4章 闭包与高阶函数 51
4.1 理解闭包 52
4.1.1 什么是闭包 52
4.1.2 记住闭包生成的位置 54
4.1.3 回顾sortBy函数 55
4.2 实用的高阶函数(续) 56
4.2.1 tap函数 56
4.2.2 unary函数 57
4.2.3 once函数 59
4.2.4 memoized函数 60
4.2.5 assign函数 62
4.3 小结 64
第5章 数组的函数式编程 65
5.1 数组的函数式方法 66
5.1.1 map 66
5.1.2 filter 70
5.2 连接操作 71
5.3 reduce函数 76
5.4 zip数组 82
5.5 小结 86
第6章 柯里化与偏应用 87
6.1 一些术语 88
6.1.1 一元函数 88
6.1.2 二元函数 88
6.1.3 变参函数 88
6.2 柯里化 90
6.2.1 柯里化用例 91
6.2.2 日志函数:应用柯里化 93
6.2.3 回顾柯里化 94
6.2.4 回顾日志函数 97
6.3 柯里化实战 99
6.3.1 在数组内容中查找数字 99
6.3.2 求数组的平方 100
6.4 数据流 100
6.4.1 偏应用 101
6.4.2 实现偏函数 101
6.4.3 柯里化与偏应用技术 104
6.5 小结 104
第7章 组合与管道 107
7.1 组合的概念 108
7.2 函数式组合 110
7.2.1 回顾map与filter 110
7.2.2 compose函数 112
7.3 应用compose函数 113
7.3.1 引入curry与partial 114
7.3.2 组合多个函数 117
7.4 管道/序列 119
7.5 组合的优势 120
7.5.1 组合满足结合律 120
7.5.2 管道操作符 121
7.5.3 使用tap函数调试 124
7.6 小结 124
第8章 函子 127
8.1 什么是函子 128
8.1.1 函子是容器 128
8.1.2 实现map方法 130
8.2 MayBe函子 132
8.2.1 实现MayBe函子 132
8.2.2 简单用例 133
8.2.3 真实用例 135
8.3 Either函子 140
8.3.1 实现Either函子 140
8.3.2 Reddit例子的Either版本 142
8.4 Pointed函子 145
8.5 小结 145
第9章 深入理解Monad 147
9.1 根据搜索词条获取Reddit评论 148
9.2 问题描述 148
9.2.1 实现第一步 150
9.2.2 合并Reddit调用 153
9.2.3 多个map的问题 157
9.3 通过join解决问题 158
9.3.1 实现join 158
9.3.2 实现chain 161
9.3.3 什么是Monad 163
9.4 小结 164
第10章 使用Generator暂停、恢复和异步 165
10.1 异步代码及其问题 166
10.2 Generator 101 168
10.2.1 创建Generator 168
10.2.2 Generator的注意事项 169
10.2.3 yield关键字 170
10.2.4 Generator的done属性 172
10.2.5 向Generator传递数据 174
10.3 使用Generator处理异步调用 176
10.3.1 一个简单的案例 176
10.3.2 一个真实的案例 181
10.4 ECMAScript 2017中的异步函数 185
10.4.1 Promise 185
10.4.2 await 186
10.4.3 async 186
10.4.4 链式回调 187
10.4.5 异步调用中的错误处理 189
10.4.6 异步函数转化为Generator 190
10.5 小结 192
第11章 构建React-Like库 193
11.1 不可变性 194
11.2 构建简单的Redux库 196
11.3 构建一个类似于HyperApp的框架 201
11.3.1 虚拟DOM 202
11.3.2 JSX 203
11.3.3 JS Fiddle 204
11.3.4 createActions 208
11.3.5 render 209
11.3.6 patch 210
11.3.7 update 211
11.3.8 merge 212
11.3.9 remove 212
11.4 小结 214
第12章 测试与总结 215
12.1 介绍 216
12.2 测试的类型 217
12.3 BDD和TDD 218
12.4 JavaScript测试框架 219
12.4.1 使用Mocha进行测试 220
12.4.2 使用Sinon进行模拟 226
12.4.3 使用Jasmine进行测试 229
12.5 代码覆盖率 231
12.6 linting 232
12.7 单元测试库代码 234
12.8 最后的想法 236
12.9 小结 237
猜您喜欢