在故事开始之前,我已经是一个拥有 10 年以上经验的专业程序员。先是 C++,然后是 C#,再然后是 Python。我能够写各种代码,我对模式和原则的掌握程度已经让我自信到看不到有学习新东西的必要。我认为自己已经“掌握了 90%的编程精髓”。
2016 年 5 月,我们开始开发 XOD 项目 (https://xod.io)。XOD 是一款为数字爱好者打造的可视化编程 IDE。为了保持它的随意性,我们必须提供一个 Web 版的 IDE。Web 版?那肯定非 JavaScript 莫属了!全部使用 JavaScript 开发的 IDE?是的,但我们不能将就使用 jQuery,我们需要更好的东西。
那时候,一种新的重量级前端开发技术出现了:一项叫做 React 的技术以及伴随而来的 Flux/Redux 模式。在它们的文档和各种相关文章中,总是伴随着函数式编程的概念。于是我开始研究 FP。
哇!就像发现了新大陆一样。当然,我也听说过 Haskell、OCaml、LISP,但我曾经认为这些程序员是那种存粹为了编程而编程,而不是为了发布产品而编程的边缘知识分子。而现在,我开始对自己的专业水平感到怀疑。
函数式和反应式编程原理根植于 XOD 的基因当中,但在开始开发之前并不明显。我“发明”的或从其他产品借鉴的很多东西其实都是以 FP 为基础。因此,我们将用一些重量级的现代 FRP JavaScript 创建一个 FRP 编程环境。
FP 为项目带来了坚实的基础和灵活性,我不想再回到“经典”的编程模式,并且在可预见的未来,我会继续基于函数编程原则来开发所有的新项目。
打破障碍
在 NPM 上可以找到大量的 JavaScript 函数式编程库,其中最值得一提的是 Ramda(http://ramdajs.com)。它有点像 Lodash 或 Underscore,不过它是基于 FP 的。Ramda 提供了几十个函数用于处理数据和组合函数。
函数本身是很好的,不过需要与一些 FP 对象配合使用。另一个库 Ramda Fantasy(https://github.com/ramda/ramda-fantasy)就提供了这样的 FP 对象。除此之外,还有其他一些 FP 库,如 Sanctuary、Fluture、Daggy。不过建议先从 Ramda 开始,先让你的大脑进入状态。
这是你可能会遇到的第一个障碍,就是在查看 FP 库的文档时,你会发现很多让人抓狂的问题。混乱的参数顺序、外来语术语、不明确的函数值,这些问题会促使你停止尝试并退回到传统的编程模式。
第一点
从事编程十年的程序员深谈JavaScript函数式
![](https://img-home.csdnimg.cn/images/20240711042549.png)