关于本书
本书系统讲解函数式范式的基础知识。我们将使用全球最流行的函数式编程语言(Functional Programming):JavaScript。有人可能认为这个选择并不明智,因为它与当前主流以命令式为主的编程文化相悖。但我认为这是学习FP的最佳途径,因为有以下几个重要原因:
- 您很可能每天都在工作中使用它
这样您每天就能在实际工作中应用所学知识,而不必在业余时间用晦涩的FP语言做些试验性项目。
- 我们无需预先掌握全部概念即可开始编程实践
在纯函数式语言中,若不用单子(Monad)就无法记录变量或读取DOM节点。但在学习过程中,我们可以『灵活处理』以逐步提升代码纯度。由于JavaScript具备混合范式特性,在知识尚有不足时,可以暂时依赖常规的编程方式。
- 该语言完全具备编写一流函数式代码的能力
借助一两个小型库的辅助,我们可以完全复现Scala或Haskell等语言的特性。虽然面向对象编程在行业中占主导地位,但在JavaScript中的实现显得笨拙:不得不频繁使用bind防止this指向错误;需要用各种变通方案处理new关键字遗漏引发的异常行为;私有成员只能通过闭包实现。这种状况如同在高速路边露营,又好似穿雨靴跳踢踏舞般笨拙。对多数人而言,函数式编程反而更为自然。同时,这些数学化的接口具有普遍适用性,您可以在Swiftz、Scalaz、Haskell、PureScript等数学文法环境中触类旁通。
当然,类型化函数式语言无疑更适合本书提倡的编程范式。JavaScript将作为学习范式的工具,其应用范围取决于读者。
在线阅读
最佳阅读体验请访问Gitbook在线阅读版。
- 快速导航侧边栏
- 浏览器内练习题
- 深入示例讲解
代码交互实践
为使学习高效且避免冗长的理论讲解,建议同步实践本书中的概念。某些概念初次接触时可能难以掌握,动手实践能帮助加深理解。
书中所有函数和代数数据结构均在附录中汇总,对应代码已发布为npm模块:
$ npm i @mostly-adequate/support另外,每章练习可直接在编辑器中运行!例如,完成exercises/ch04目录下的exercise_*.js文件后,执行:
$ npm run ch04下载书籍
获取预生成的PDF和EPUB版本,请访问最新发行版的构建产物。
本地构建指南
⚠️ 当前项目配置稍显陈旧,本地构建可能遇到各种问题。推荐使用node v10.22.1和最新版Calibre。
关于Node版本说明
由于推荐的node版本(v10.22.1)较旧,系统可能未预装。建议使用nvm进行多版本管理:
- 安装所需node版本:
nvm install 10.22.1
nvm install 20.2.0- 切换版本:
nvm use 10.22.1
node -v // will show v10.22.1
nvm use 20.2.0
node -v // will show v20.2.0因项目自带.nvmrc文件,可通过以下命令自动处理版本:
// being anywhere inside this project
nvm install
node -v // will show v10.22.1完整构建命令序列
综合上述说明,本地生成电子书的完整命令序列如下:
git clone https://github.com/MostlyAdequate/mostly-adequate-guide.git
cd mostly-adequate-guide/
nvm install
npm install
npm run setup
npm run generate-pdf
npm run generate-epub注意!生成电子书需安装
ebook-convert,安装指南。
目录索引
贡献指南
翻译信息
常见问题
详见FAQ.md
未来规划
- 第一部分(1-7章)为基础教程。由于这是初稿,发现错误会及时更新,欢迎协助修正!
- 第二部分(8-13章)涵盖函子(Functor)、单子(Monad)直至可穿越式(Traversable)等类型类。计划补充转换器(Transformer)和纯应用的内容。
- 第三部分(14+章)将探索实用编程与学术理论的结合,包括余代数(Comonad)、F-代数、自由单子(Free Monad)、米田引理(Yoneda)等范畴论概念。

This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
