原文地址:Functional-Light-JS
原文作者:Kyle Simpson - 《You-Dont-Know-JS》作者
译者团队(排名不分先后):阿希、blueken、brucecham、cfanlife、dail、kyoko-df、l3ve、lilins、LittlePineapple、MatildaJin、冬青、pobusama、Cherry、萝卜、vavd317、vivaxy、萌萌、zhouyao
关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTML 最坚实的梁柱;分享,是 CSS 里最闪耀的一瞥;总结,是 JavaScript 中最严谨的逻辑。经过捶打磨练,成就了本书的中文版。本书包含了函数式编程之精髓,希望可以帮助大家在学习函数式编程的道路上走的更顺畅。比心。
本书主要探索函数式编程[1](FP)的核心思想。在此过程中,作者不会执着于使用大量复杂的概念来进行诠释,这也是本书的特别之处。我们在 JavaScript 中应用的仅仅是一套基本的函数式编程概念的子集。我称之为“轻量级函数式编程(FLP)”。
注释: 题目中使用了“轻量”二字,然而这并不是一本“轻松的”“入门级”书籍。本书是严谨的,充斥着各种复杂的细节,适合拥有扎实 JS 知识基础的阅读者进行研读。“轻量”意味着范围缩小。通常来说,关于函数式编程的 JavaScript 书籍都热衷于拓展阅读者的知识面,并企图覆盖更多的知识点。而本书则对于每一个话题都进行了深入的探究,尽管这种探究是小范围进行的。
让我们面对这个事实:除非你已经是函数式编程高手中的一员(至少我不是!),否则类似“一个单子仅仅是自函子中的幺半群”这类说法对我们来说毫无意义。
这并不是说,各种复杂繁琐的概念是无意义的,更不是说,函数式编程者滥用了它们。一旦你完全掌握了轻量的函数式编程内容,你将会/但愿会想要对函数式编程的各种概念进行更正式更系统的学习,并且你一定会对它们的意义和原因有更深入的理解。
但是我更想要让你能够现在就把一些函数式编程的基础运用到 JavaScript 编程过程中去,因为我相信这会帮助你写出更优秀的,更符合逻辑的代码。
更多关于本书背后的动机和各种观点讨论,请参看[前言]。
JavaScript 轻量级函数式编程
目录
序言
前言
-
第 1 章:为什么使用函数式编程?
置信度
交流渠道
接受
你不需要它
资源
-
第 2 章:函数基础
什么是函数?
函数输入
函数输出
函数功能
句法
来说说 This ?
-
第 3 章:管理函数的输入(Inputs)
立即传参和稍后传参
一次传一个
只要一个实参
扩展在参数中的妙用
参数顺序的那些事儿
无形参风格
-
第 4 章:组合函数
输出到输入
重排序组合
抽象
回顾形参
-
第 5 章:减少副作用
什么是副作用
一次就好
纯粹的快乐
有或者无
纯化
-
第 6 章:值的不可变性
原始值的不可变性
从值到值
重新赋值
性能
以不可变的眼光看待数据
-
第 7 章: 闭包 vs 对象
达成共识
相像
同根异枝
-
第 8 章:列表操作
非函数式编程列表处理
映射
过滤器
Reduce
高级列表操作
方法 vs 独立
查寻列表
融合
列表之外
-
第 9 章:递归
定义
声明式递归
栈、堆
重构递归
-
第 10 章:异步的函数式
时间状态
积极的 vs 惰性的
响应式函数式编程
-
第 11 章:融会贯通
准备
股票信息
股票行情界面
附录 A: Transducing
附录 B: 谦虚的 Monad
附录 C: 函数式编程函数库
关于出版
本书主要在 on Leanpub 平台上以电子版本的形式进行出版。我也尝试出售本书的纸质版本,但没有确定的方案。
除了购买本书以外,如果你想要对本书作一些物质上的捐赠,请在 patreon 上进行操作。本书作者感谢你的慷慨解囊。
Patreon
真人教学课程
本书内容大多源自于我教授的一个同名课程(以公司举办的公开或内部研讨会这样的形式进行)。
如果你喜欢本书的内容,并希望组织此类课程,或者组织关于其他 JS/HTML5/Node.js 课程,请通过以下方式联系我:
http://getify.me
在线视频课程
我还提供一些可以在线点播的 JS 培训课程。我在 Frontend Masters 上开办课程,例如我的 Functional-Lite JS 研讨会。还有一些课程发布在 PluralSight 上。
Contributions
关于内容贡献
非常欢迎对于本书的任何内容贡献。但是在提交 PR 之前请务必认真阅读 Contributions Guidelines。
License & Copyright
版权
本书所有的材料和内容都归属 (c) 2016-2017 Kyle Simpson 所有。
https://www.youtube.com/watch...
我希望这本书有可能打破上面的诅咒,尽管我们要到最后的附录部分才开始讨论「monad」。
科班出身的函数式编程者经常宣称只有 100% 使用函数式编程才算是真正地使用函数式编程:这是一种要么全有要么全无的主张。它会让人觉得如果编程时只有一部分使用了函数式编程而另一部分没用到,整个程序会被那些没有使用函数式编程的部分污染,从而认为使用函数式编程并不值得。
我想明确地说:我认为绝对主义并不存在。这没有意义,就像愚蠢地建议我只有使用完美的语法,这本书才算完美,如果犯了一点点错误,就会让整本书质量变低一样。
我写地越清楚,前后越一致,你阅读此书的体验将越好。但我不是一个完美无缺的作者。有些章节可能比另外一些写的好。但是那些有待提高的章节不会使书中写的好的部分黯然失色。
同样的道理也适用于代码。随着你越来越多的使用函数式编程的模式,你的代码质量会越来越高。25% 的时间使用它们,你会得到一些好处。80% 的时间使用它们,你将收益更多。
除了几处仅存的特例,你不会在本书里看到很多绝对的论断。我们讨论的是要追求的目标和现实中方方面面的权衡。
欢迎来到最实用的函数式编程的学习之旅。我们将共同探讨学习!
FPer,本书统称为函数式编程者。
【下一章】翻译连载 |《JavaScript 轻量级函数式编程》- 第 1 章:为什么使用函数式编程?
iKcamp原创新书《移动Web前端高效开发实战》已在亚马逊、京东、当当开售。