所谓组合式函数编程,是为了解决多层函数嵌套求值的问题,这种类似于“包菜式”的函数调用可以看如下示例:
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' ]
如果觉得我的文章对您有用,请您随意打赏。您的支持将鼓励我更加努力创作!
如无特殊声明,文章均为原创,若有不正之处,万望告知。转载请附上原文地址,十分感谢!