经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JSJS库框架 » JavaScript » 查看文章
js函数式编程(三)-compose和pointFree
来源:cnblogs  作者:Yang.kid  时间:2018/9/28 16:51:46  对本文有异议

compose即函数嵌套组合

组合compose在第一篇已经初见端倪,可以感受一下。compose函数的实现用闭包的方法。不完善实现如下:

  1. const compose = (f, g) => {
  2. return x => f(g(x));
  3. };

compose使用实例

你可以用ramda的compose函数,而不是自己实现。

  1. import {compose} from 'ramda'
  2. const f = (x: number) => 2 * x
  3. const g = (y: number) => y + 1
  4. const w = compose(g, f);
  5. console.log(w(1)) // 3
  6. console.log(w(2)) // 5
  7. console.log(w(3)) // 7

compose的数学特性

有了compose,我们可以很方便的组合,可以使用结合律,即

  1. compose(toUpperCase, compose(head, reverse));

或者

  1. compose(compose(toUpperCase, head), reverse);

你可以想想初中数学,这是成立的。现在多个函数组合成一个大函数,我们的代码开始变得巧妙起来了。

compose天生pointFree

用compose组合的就是pointFree代码,即你无需指定传递的形参,你可以看看w函数,就知道了。是不是更妙了?其实离上一个妙,我们什么也没做。哈哈哈! 组合像一系列管道那样把不同的函数联系在一起 ----原文

要注意的是

compose只将不同函数的输出与输入相连,上面代码有一些致命问题,无法分支!或者分支成本巨大,举个例子,如果reverse出错,那么后续就会继续执行,head将拿到错误的输入,继续输出,toUpperCase就错上加错了,当然你可以在每个函数内做严谨的if/else判断,可是成本巨大。目前compose就是一匹脱了缰的骏马。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号