内容简介 · · · · · ·
在后端,函数式语言层出不穷。在前端,函数式最后的边界也已经被渐渐打破。Scala的Scala.js、Clojure的ClojureScript都试图同构移向前端。然而,原生JavaScript其实也可以通过丰富的库让前端的函数式编程一样的舒适和优雅。
《前端函数式攻城指南》涵盖了大部分函数式编程思想,包括JavaScript的函数式支持,Clojure风格的集合、递归、函数组合、宏、模式匹配、实用的Monads,以及前端的并发编程。
《前端函数式攻城指南》适合想要了解函数式编程的JavaScript程序员或者想学习JavaScript的函数式程序员阅读。
目录 · · · · · ·
第1章 函数式JavaScript 1
1.1 JavaScript也是函数式语言吗 1
1.1.1 编程范式 1
1.1.2 JavaScript的函数式支持 3
1.2 作为函数式语言,JavaScript还差些什么 10
1.2.1 不可变数据结构 11
· · · · · · (更多)
1.1 JavaScript也是函数式语言吗 1
1.1.1 编程范式 1
1.1.2 JavaScript的函数式支持 3
1.2 作为函数式语言,JavaScript还差些什么 10
1.2.1 不可变数据结构 11
· · · · · · (更多)
第1章 函数式JavaScript 1
1.1 JavaScript也是函数式语言吗 1
1.1.1 编程范式 1
1.1.2 JavaScript的函数式支持 3
1.2 作为函数式语言,JavaScript还差些什么 10
1.2.1 不可变数据结构 11
1.2.2 惰性求值 11
1.2.3 函数组合 12
1.2.4 尾递归优化 13
1.3 Underscore你错了 14
1.3.1 跟大家都不一样的 map 函数 14
1.3.2 ClojureScript 16
1.3.3 Mori 17
1.4 小结 18
第2章 集合 19
2.1 集合的使用 20
2.1.1 向量(vector) 20
2.1.2 Map 23
2.1.3 函数组合子 24
2.2 持久性数据结构 27
2.2.1 向量的持久性数据结构 28
2.2.2 最后一片叶子不完整 31
2.2.3 所有叶子完整且叶子个数不大于完全树的叶子个数 32
2.2.4 所有叶子完整且叶子个数大于完全树的叶子个数 34
2.3 不可变性 35
2.3.1 致命魔术 36
2.3.2 引用透明性 38
2.3.3 函数式React 40
2.3.4 线程不安全 42
2.4 惰性序列 44
2.4.1 改良奥利奥吃法 44
2.4.2 惰性求值与及早求值 46
2.4.3 惰性求值的实现 48
2.5 小结 50
第3章 递归 51
3.1 不可变性与递归 51
3.1.1 真的需要循环吗 52
3.1.2 递归还是循环 54
3.2 柯里悖论 55
3.2.1 Y组合子 57
3.2.2 栈是多么容易爆 60
3.3 尾递归优化 62
3.4 蹦跳乐园(Trampoline) 64
3.4.1 有穷状态机(DFA) 65
3.4.2 Trampoline 67
3.5 小结 69
第4章 函数组合 70
4.1 Underscore到底做错了什么 70
4.1.1 自由(Free)变量与约束(Bound)变量 72
4.1.2 闭包 74
4.2 柯里化有什么用 75
4.3 Transducer 78
4.3.1 Reducer 79
4.3.2 来看看更好更快的解法 79
4.3.3 Reducer 80
4.3.4 Reducible 81
4.3.5 Transducer详解 82
4.3.6 跟柯里化有什么区别 83
4.4 组合与管道 84
4.4.1 管道(Pipeline) 84
4.4.2 组合与管道 86
4.4.3 管道函数 87
4.5 小结 87
第5章 Macro宏 89
5.1 什么是REPL 89
5.1.1 宏扩展器(Macro Expander) 90
5.1.2 那么前端怎么办 92
5.2 为什么要语法糖 93
5.2.1 只是为了语法漂亮吗 94
5.3 Sweet.js 94
5.3.1 Rule Macro 95
5.3.2 Case Macro 97
5.4 Infix Macro 和 Operator 104
5.4.1 Infix Macro 104
5.4.2 自定义操作符 105
5.5 小结 106
第6章 模式匹配 107
6.1 Destructure 107
6.1.1 对象 109
6.1.2 数组 109
6.1.3 函数 109
6.2 Arity 函数 110
6.3 Fizz Buzz 111
6.3.1 字面匹配(Literal Matching) 111
6.3.2 绑定 113
6.3.3 Vector与Map匹配 113
6.3.4 Guard 114
6.3.5 Sparkler 114
6.4 代数数据类型(ADT) 116
6.5 小结 118
第7章 Monadic编程 119
7.1 链式调用 119
7.1.1 Promise 120
7.1.2 高阶Promise 122
7.2 Monad 123
7.2.1 函子(Functor) 123
7.2.2 Applicative Functor 126
7.2.3 含幺半群(Monoid) 130
7.2.4 Monad就是容器界的管道 132
7.2.5 Monad就是自函子范畴上的一个幺半群 136
7.3 走钢丝 139
7.3.1 用Monad表示薛定谔猫 139
7.3.2 皮尔斯走钢丝 140
7.4 Monad在JavaScript中的应用 143
7.4.1 Promise版本的走钢丝 144
7.4.2 When 144
7.5 Reactive编程 146
7.5.1 流(Stream) 146
7.5.2 Functor 147
7.5.3 Applicative 147
7.5.4 Monad 148
7.5.5 一个“简单”的Reactive实例 149
7.6 小结 153
第8章 并发编程 154
8.1 什么是并发 154
8.1.1 异步与多线程 155
8.1.2 JavaScript的并发模型 157
8.2 通信顺序进程(CSP) 160
8.3 使用Generator实现CSP 162
8.3.1 Generator 163
8.3.2 Go Block 163
8.3.3 timeout 164
8.3.4 take <! 165
8.3.5 put >! 165
8.3.6 JavaScript CSP版本的例子 166
8.4 实战 CSP 168
8.4.1 使用移植的core.async 168
8.4.2 使用ES7中的异步函数 169
8.4.3 try catch 170
8.5 小结 173
参考资料 174
· · · · · · (收起)
1.1 JavaScript也是函数式语言吗 1
1.1.1 编程范式 1
1.1.2 JavaScript的函数式支持 3
1.2 作为函数式语言,JavaScript还差些什么 10
1.2.1 不可变数据结构 11
1.2.2 惰性求值 11
1.2.3 函数组合 12
1.2.4 尾递归优化 13
1.3 Underscore你错了 14
1.3.1 跟大家都不一样的 map 函数 14
1.3.2 ClojureScript 16
1.3.3 Mori 17
1.4 小结 18
第2章 集合 19
2.1 集合的使用 20
2.1.1 向量(vector) 20
2.1.2 Map 23
2.1.3 函数组合子 24
2.2 持久性数据结构 27
2.2.1 向量的持久性数据结构 28
2.2.2 最后一片叶子不完整 31
2.2.3 所有叶子完整且叶子个数不大于完全树的叶子个数 32
2.2.4 所有叶子完整且叶子个数大于完全树的叶子个数 34
2.3 不可变性 35
2.3.1 致命魔术 36
2.3.2 引用透明性 38
2.3.3 函数式React 40
2.3.4 线程不安全 42
2.4 惰性序列 44
2.4.1 改良奥利奥吃法 44
2.4.2 惰性求值与及早求值 46
2.4.3 惰性求值的实现 48
2.5 小结 50
第3章 递归 51
3.1 不可变性与递归 51
3.1.1 真的需要循环吗 52
3.1.2 递归还是循环 54
3.2 柯里悖论 55
3.2.1 Y组合子 57
3.2.2 栈是多么容易爆 60
3.3 尾递归优化 62
3.4 蹦跳乐园(Trampoline) 64
3.4.1 有穷状态机(DFA) 65
3.4.2 Trampoline 67
3.5 小结 69
第4章 函数组合 70
4.1 Underscore到底做错了什么 70
4.1.1 自由(Free)变量与约束(Bound)变量 72
4.1.2 闭包 74
4.2 柯里化有什么用 75
4.3 Transducer 78
4.3.1 Reducer 79
4.3.2 来看看更好更快的解法 79
4.3.3 Reducer 80
4.3.4 Reducible 81
4.3.5 Transducer详解 82
4.3.6 跟柯里化有什么区别 83
4.4 组合与管道 84
4.4.1 管道(Pipeline) 84
4.4.2 组合与管道 86
4.4.3 管道函数 87
4.5 小结 87
第5章 Macro宏 89
5.1 什么是REPL 89
5.1.1 宏扩展器(Macro Expander) 90
5.1.2 那么前端怎么办 92
5.2 为什么要语法糖 93
5.2.1 只是为了语法漂亮吗 94
5.3 Sweet.js 94
5.3.1 Rule Macro 95
5.3.2 Case Macro 97
5.4 Infix Macro 和 Operator 104
5.4.1 Infix Macro 104
5.4.2 自定义操作符 105
5.5 小结 106
第6章 模式匹配 107
6.1 Destructure 107
6.1.1 对象 109
6.1.2 数组 109
6.1.3 函数 109
6.2 Arity 函数 110
6.3 Fizz Buzz 111
6.3.1 字面匹配(Literal Matching) 111
6.3.2 绑定 113
6.3.3 Vector与Map匹配 113
6.3.4 Guard 114
6.3.5 Sparkler 114
6.4 代数数据类型(ADT) 116
6.5 小结 118
第7章 Monadic编程 119
7.1 链式调用 119
7.1.1 Promise 120
7.1.2 高阶Promise 122
7.2 Monad 123
7.2.1 函子(Functor) 123
7.2.2 Applicative Functor 126
7.2.3 含幺半群(Monoid) 130
7.2.4 Monad就是容器界的管道 132
7.2.5 Monad就是自函子范畴上的一个幺半群 136
7.3 走钢丝 139
7.3.1 用Monad表示薛定谔猫 139
7.3.2 皮尔斯走钢丝 140
7.4 Monad在JavaScript中的应用 143
7.4.1 Promise版本的走钢丝 144
7.4.2 When 144
7.5 Reactive编程 146
7.5.1 流(Stream) 146
7.5.2 Functor 147
7.5.3 Applicative 147
7.5.4 Monad 148
7.5.5 一个“简单”的Reactive实例 149
7.6 小结 153
第8章 并发编程 154
8.1 什么是并发 154
8.1.1 异步与多线程 155
8.1.2 JavaScript的并发模型 157
8.2 通信顺序进程(CSP) 160
8.3 使用Generator实现CSP 162
8.3.1 Generator 163
8.3.2 Go Block 163
8.3.3 timeout 164
8.3.4 take <! 165
8.3.5 put >! 165
8.3.6 JavaScript CSP版本的例子 166
8.4 实战 CSP 168
8.4.1 使用移植的core.async 168
8.4.2 使用ES7中的异步函数 169
8.4.3 try catch 170
8.5 小结 173
参考资料 174
· · · · · · (收起)
喜欢读"前端函数式攻城指南"的人也喜欢的电子书 · · · · · ·
支持 Web、iPhone、iPad、Android 阅读器
喜欢读"前端函数式攻城指南"的人也喜欢 · · · · · ·
前端函数式攻城指南的书评 · · · · · · ( 全部 3 条 )
纯理论可以,理论证明欠佳
书比较薄,花了点时间看完了。 我能感受到作者用了很多不同的方式去证明理论知识,书中涉及的知识面也是挺广的,比如作者用了很多非js的代码去证明所讲的理论,不止一种语言,而且再用js证明的时候,还不停的把es5和es6相互穿插着,思绪看的比较乱,因为看代码的时候经常要在不...
(展开)
> 更多书评 3篇
论坛 · · · · · ·
咳咳暗黑天蝎的纯暗黑读感 | 来自哗呀哩呜 | 1 回应 | 2018-12-11 16:23:20 |
有电子版出售吗? | 来自Nicholas | 1 回应 | 2017-01-07 20:18:58 |
前端函数式攻城指南 勘误 | 来自oyanglul.us | 2017-01-07 20:16:41 |
以下书单推荐 · · · · · · ( 全部 )
谁读这本书? · · · · · ·
二手市场
· · · · · ·
订阅关于前端函数式攻城指南的评论:
feed: rss 2.0
2 有用 陆离 2017-09-02 12:50:30
我觉得这本书在解释 Monad 上面还是说得挺好的
0 有用 Snowflyt 2022-11-13 13:20:35 江苏
很好的一本书,就是要对上电波才能看着爽……阅读本书需要一点对FP的基本认识,对LISP有一些了解,而且读者本身也需要接触偏杂的一些基本概念,否则很容易在阅读过程中因为不了解某个被一笔带过的概念而卡住,而作者在行文过程中对此毫无自觉……如果掌握了上述前置知识,这其实是一本读着深入浅出又不乏幽默感的好书,尤其是Monoid一章我感觉写得非常好。只能说受众定位错了,看到这本书的多数读者是很难读懂书里在写... 很好的一本书,就是要对上电波才能看着爽……阅读本书需要一点对FP的基本认识,对LISP有一些了解,而且读者本身也需要接触偏杂的一些基本概念,否则很容易在阅读过程中因为不了解某个被一笔带过的概念而卡住,而作者在行文过程中对此毫无自觉……如果掌握了上述前置知识,这其实是一本读着深入浅出又不乏幽默感的好书,尤其是Monoid一章我感觉写得非常好。只能说受众定位错了,看到这本书的多数读者是很难读懂书里在写什么的,只会觉得作者在自嗨,自己又读着很痛苦……书中有一些typo,一些地方思维有点过于跳脱,不容易跟上,但总体确实相当精彩。说实话我读了一小半的时候来豆瓣看到这么低的评分真给吓了一跳,不知道为啥这么低,看完之后意识到这是受众选错了,而且出版社给的这封面确实没啥品味,怪不得滞销呢 (展开)
2 有用 小王 2018-02-10 10:22:05
作者不具备基本的写作素养。书籍无法阅读。看了一半。。。就这样吧
1 有用 Poplar_hills 2019-12-30 13:01:37
今年读过的最差的技术书籍,作者完全不具备写作素养,写出来的东西只是给自己看的
0 有用 RRRSSS 2022-11-24 15:12:35 新加坡
这本书我是 17 年买的,看了第一章之后就看不下去了,最近又捡了起来,2 天读完,果然,自己还是进步了。 全文基本上都有 Clojure 代码,没有基础的人,谨慎阅读。可以看出作者对这个领域是有研究的,Clojure 的确是入门函数式的一个好语言。不过,既然都是给前端读的,可能选用 ClojureScript 会更好点吧。 函数式的内容太大了,的确一本书是不够的。这本书看完让我把 Clojure... 这本书我是 17 年买的,看了第一章之后就看不下去了,最近又捡了起来,2 天读完,果然,自己还是进步了。 全文基本上都有 Clojure 代码,没有基础的人,谨慎阅读。可以看出作者对这个领域是有研究的,Clojure 的确是入门函数式的一个好语言。不过,既然都是给前端读的,可能选用 ClojureScript 会更好点吧。 函数式的内容太大了,的确一本书是不够的。这本书看完让我把 Clojure 又复习了一遍。 (展开)
0 有用 RRRSSS 2022-11-24 15:12:35 新加坡
这本书我是 17 年买的,看了第一章之后就看不下去了,最近又捡了起来,2 天读完,果然,自己还是进步了。 全文基本上都有 Clojure 代码,没有基础的人,谨慎阅读。可以看出作者对这个领域是有研究的,Clojure 的确是入门函数式的一个好语言。不过,既然都是给前端读的,可能选用 ClojureScript 会更好点吧。 函数式的内容太大了,的确一本书是不够的。这本书看完让我把 Clojure... 这本书我是 17 年买的,看了第一章之后就看不下去了,最近又捡了起来,2 天读完,果然,自己还是进步了。 全文基本上都有 Clojure 代码,没有基础的人,谨慎阅读。可以看出作者对这个领域是有研究的,Clojure 的确是入门函数式的一个好语言。不过,既然都是给前端读的,可能选用 ClojureScript 会更好点吧。 函数式的内容太大了,的确一本书是不够的。这本书看完让我把 Clojure 又复习了一遍。 (展开)
0 有用 Snowflyt 2022-11-13 13:20:35 江苏
很好的一本书,就是要对上电波才能看着爽……阅读本书需要一点对FP的基本认识,对LISP有一些了解,而且读者本身也需要接触偏杂的一些基本概念,否则很容易在阅读过程中因为不了解某个被一笔带过的概念而卡住,而作者在行文过程中对此毫无自觉……如果掌握了上述前置知识,这其实是一本读着深入浅出又不乏幽默感的好书,尤其是Monoid一章我感觉写得非常好。只能说受众定位错了,看到这本书的多数读者是很难读懂书里在写... 很好的一本书,就是要对上电波才能看着爽……阅读本书需要一点对FP的基本认识,对LISP有一些了解,而且读者本身也需要接触偏杂的一些基本概念,否则很容易在阅读过程中因为不了解某个被一笔带过的概念而卡住,而作者在行文过程中对此毫无自觉……如果掌握了上述前置知识,这其实是一本读着深入浅出又不乏幽默感的好书,尤其是Monoid一章我感觉写得非常好。只能说受众定位错了,看到这本书的多数读者是很难读懂书里在写什么的,只会觉得作者在自嗨,自己又读着很痛苦……书中有一些typo,一些地方思维有点过于跳脱,不容易跟上,但总体确实相当精彩。说实话我读了一小半的时候来豆瓣看到这么低的评分真给吓了一跳,不知道为啥这么低,看完之后意识到这是受众选错了,而且出版社给的这封面确实没啥品味,怪不得滞销呢 (展开)
0 有用 寒号鸟 2022-06-28 14:24:04
这书我觉得写的非常容易懂,比外国人写的好,不知道为啥打低分
1 有用 Poplar_hills 2019-12-30 13:01:37
今年读过的最差的技术书籍,作者完全不具备写作素养,写出来的东西只是给自己看的
0 有用 黑白猪 2019-03-19 07:53:28
作者写的意犹未尽,他的技术确实牛b,也尝试写的很亲民,但是没点卵用。多看看阮一峰的写作风格