“函数是一等公民”背后的含义
https://blog.leapoahead.com/2015/09/19/function-as-first-class-citizen/ 直接聊清楚了纯函数为什么好测试(因为没有副作用),JavaScript 与函数式编程
此外,它预测到在推广一个 library 的时候,如果它在突出自己的纯函数概念,那么这个库给人的感觉就是它会 “非常好学”:借由纯函数概念,它十分容易建立起一个十分简约的心智模型。这种 “简约” 的感觉仿佛写 java 者 见到 Stream API ,写 C# 者见到 LINQ:这些函数式编程的应用一旦出现在 SDK 里它会带来一种 “解放大脑” 的感觉。
然而一个依赖纯函数概念而变得流行的库,这种 “流行” 即流行度的获得呢几乎是一种 “作弊” :纵使它所依托的纯函数概念十分精巧,但从根本上看,在观察(抽象的)函数式编程本身的时候(如上文所示),上文的结论之一就是任何纯函数本身几乎是没用的 —— 除了测试起来好测、因为没有副作用所以写起来爽、“听起来好听” 这种心理因素
精妙但无用!
软件工程本身的复杂度、如何控制复杂度,难道就能被一句 “纯函数没有副作用” 就能抹平的吗?做梦
软件工程关注点在哪里,这是不变的,也是一个人不能逃避的。简言之,作弊的甜头是会让一个人退步的
即使你用了纯函数主打的库,你也可以写出一个难以维护的项目:是的,这个库就是依托纯函数概念的 react.js 。或许可以这么说,正因为在进入一个纯函数主打的库的生态里(即 react.js 生态),所以一个难以维护的项目是更容易诞生的。
而且 react.js 本身将会如何变得臃肿是难以想象的!按照函数式编程本身推算,函数式编程只适合写工具类,而那些函数式编程的应用 比如 Stream API 和 LINQ 也就仅仅是工具类,它们是好工具,好就好在它是死的。而 react.js 是还在不停推出新版本的,它想干什么?
而如上文所示,如何管理状态 / 副作用 / 复杂度,本身已经不是纯函数编程关注的重点了。在那个氛围里绕了一圈的人们将会回到起点