函数式编程是一种编程范式,它的优点是简洁易读,模块化,低耦合,适合并发编程等,很多前端大咖都推过函数式编程。这本对书函数式编程的相关概念和编程思想都讲的比较好也容易理解,从中你可以学习到纯函数、高阶函数、柯里化(Currying) 等知识。如果你用过 react,这一类知识肯定用得比较多,学好函数式编程也有助于你更好地理解 React 的设计思想。
函数式编程是一种古老的编程范式。近些年来,随着RxJS 等函数式框架的流行,它焕发了青春,再次进入了我们的视野。与Haskell 等语言相比,JavaScript 虽然不是一种纯函数语言,但它将函数视为一等公民,非常适合函数式编程范式。函数式编程为应用带来的可维护性、可测试性和可扩展性是不言而喻的,而纯函数、高阶函数、柯里化、组合、Monad 等诸多概念往往令刚刚接触它的人无从下手。
快速掌握一个知识体系的秘诀是抓住概念并理清概念之间的关系。《JavaScript ES6 函数式编程入门经典》将函数式编程中那些抽象的原理分解为一个个简单的概念,娓娓道来,并配以丰富的实战案例,逐步带你领略函数式编程的魅力。掌握函数式编程思想对开发与理解单数据流应用非常有帮助,愿《JavaScript ES6函数式编程入门经典》带你开启这段非凡的旅程!
AntoAravinth是来自VisualBIChennai研发中心的高级商业智能开发工程师。在过去的五年中,他曾使用Java、JavaScript语言以及ReactJs、angular等框架开发Web应用。他对Web和Web标准有透彻的理解。他也是流行框架ReactJs、Selenium和Groovy的开源贡献者。AntoAravinth在业余时间喜欢打乒乓球。他很有幽默感!他也是ReactQuickly一书的技术开发编辑,此书在2017年由Manning出版社出版。
第1章函数式编程简介1
1.1什么是函数式编程?为何它重要1
1.2引用透明性4
1.3命令式、声明式与抽象5
1.4函数式编程的好处7
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我们要构建什么15
1.11JavaScript是函数式编程语言吗15
1.12小结16
第2章JavaScript函数基础17
2.1ECMAScript历史18
2.2创建并执行函数19
2.2.1第一个函数19
2.2.2严格模式21
2.2.3return语句是可选的22
2.2.4多语句函数22
2.2.5函数参数24
2.2.6ES5函数在ES6中是有效的24
2.3设置项目24
2.3.1初始设置24
2.3.2用第一个函数式方法处理循环问题26
2.3.3export要点28
2.3.4import要点28
2.3.5使用babel-node运行代码29
2.3.6在npm中创建脚本30
2.3.7从git上运行源代码31
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.1every函数42
3.3.2some函数44
3.3.3sort函数44
3.4小结48
第4章闭包与高阶函数49
4.1理解闭包50
4.1.1什么是闭包50
4.1.2记住闭包生成的位置52
4.1.3回顾sortBy函数53
4.2真实的高阶函数(续)54
4.2.1tap函数54
4.2.2unary函数56
4.2.3once函数57
4.2.4memoized函数58
4.3小结60
第5章数组的函数式编程61
5.1数组的函数式方法62
5.1.1map62
5.1.2filter65
5.2连接操作67
5.3reduce函数71
5.4zip数组77
5.5小结81
第6章柯里化与偏应用83
6.1一些术语84
6.1.1一元函数84
6.1.2二元函数84
6.1.3变参函数84
6.2柯里化86
6.2.1柯里化用例87
6.2.2日志函数——应用柯里化89
6.2.3回顾curry90
6.2.4回顾日志函数93
6.3柯里化实战94
6.3.1在数组内容中查找数字94
6.3.2求数组的平方95
6.4数据流96
6.4.1偏应用96
6.4.2实现偏函数97
6.4.3柯里化与偏应用99
6.5小结100
第7章组合与管道101
7.1组合的概念102
7.2函数式组合104
7.2.1回顾map与filter104
7.2.2compose函数106
7.3应用compose函数106
7.3.1引入curry与partial108
7.3.2组合多个函数111
7.4管道/序列113
7.5组合的优势114
7.5.1组合满足结合律114
7.5.2使用tap函数调试115
7.6小结116
第8章函子117
8.1什么是函子118
8.1.1函子是容器118
8.1.2函子实现了map方法120
8.2MayBe函子121
8.2.1实现MayBe函子122
8.2.2简单用例123
8.2.3真实用例125
8.3Either函子129
8.3.1实现Either函子130
8.3.2reddit例子的Either版本131
8.4Pointed函子134
8.5小结134
第9章深入理解Monad135
9.1根据搜索词条获取Reddit评论136
9.2问题描述136
9.2.1实现第一步138
9.2.2合并Reddit调用141
9.2.3多个map的问题144
9.3通过join解决问题146
9.3.1实现join146
9.3.2实现chain148
9.4小结151
第10章使用Generator153
10.1异步代码及其问题154
10.2Generator基础156
10.2.1创建Generator156
10.2.2Generator的注意事项157
10.2.3yield关键字158
10.2.4done属性160
10.2.5向Generator传递数据162
10.3使用Generator处理异步调用164
10.3.1一个简单的案例164
10.3.2一个真实的案例169
10.4小结172