组合式函数编程

所谓组合式函数编程,是为了解决多层函数嵌套求值的问题,这种类似于“包菜式”的函数调用可以看如下示例:

var val = fn4(fn3(fn2(fn1(value))));

为了获得一个值,需要多层函数处理,这种实现方式看起来很不直观,而且也不利于维护,为此,可以使用函数组合的方式来实现同样的功能。

const compose = (...fns) =>
  fns.reverse().reduce((prevFn, nextFn) =>
    value => nextFn(prevFn(value)),
    value => value
  );

或者这样写更加好理解一些

const compose = (...fns) => (value => (fns.reverse().reduce((prevFn, fn) => fn(prevFn(value)))));

上述的函数就可该写为:

var val = compose(fn4, fn3, fn2, fn1)(value);

这样给阅读与维护都带来了巨大的便利性。

例如,需要将一个字符串所有字符转为大写,然后再根据空格拆分为一个数组,可以使用这种方式来实现效果。

const toUpperCase = word => word.toUpperCase();
const split = x => (str => str.split(x));

console.log(compose(split(' '), toUpperCase)('asdad adzxc 1s')); //[ 'ASDAD', 'ADZXC', '1S' ]
如果您觉得本文对您有用,欢迎捐赠或留言~
微信支付
支付宝

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注