组合compose在第一篇已经初见端倪,能够感觉一下。compose函数的实现用闭包的方法。不完善实现以下: 数组
const compose = (f, g) => { return x => f(g(x)); };
你能够用ramda的compose函数,而不是本身实现。 闭包
import {compose} from 'ramda' const f = (x: number) => 2 * x const g = (y: number) => y + 1 const w = compose(g, f); console.log(w(1)) // 3 console.log(w(2)) // 5 console.log(w(3)) // 7
有了compose,咱们能够很方便的组合,能够使用结合律,即 函数
compose(toUpperCase, compose(head, reverse));
或者code
compose(compose(toUpperCase, head), reverse);
你能够想一想初中数学,这是成立的。如今多个函数组合成一个大函数,咱们的代码开始变得巧妙起来了。 数学
用compose组合的就是pointFree代码,即你无需指定传递的形参,你能够看看w函数,就知道了。是否是更妙了?其实离上一个妙,咱们什么也没作。哈哈哈! 组合像一系列管道那样把不一样的函数联系在一块儿 ----原文 console
compose只将不一样函数的输出与输入相连,上面代码有一些致命问题,没法分支!或者分支成本巨大,举个例子,若是reverse出错,那么后续就会继续执行,head将拿到错误的输入,继续输出,toUpperCase就错上加错了,固然你能够在每一个函数内作严谨的if/else判断,但是成本巨大。目前compose就是一匹脱了缰的骏马。 class