函数式编程的compose
函数式编程就像搭积木,通过不同的函数组合实现复杂的功能。
但是在实现过程中传值和连续调用不方便也不优雅,所以可以借助compose函数。
composet函数可以方便的连续执行方法,它把传值和调用的过程进行了封装,我们只需要传递给compose函数我们要执行的方法,它会自动帮我们执行。
简单的说,他就是辅助我们去连续执行函数的一个功能函数。
自己封装一个compose
compose的参数应该是函数,先执行的函数参数放到后面,也就是compose函数从右向左执行传入的参数(参数是一个一个的函数)。
因为传入的参数是不确定的,所以函数内部使用argumens去获取所有的不定参。
每次执行以后,第一次调用的结果,就是下一次函数的参数。
compose的返回值是一个函数,这个函数说白了就是参数函数调用的组合结果。
代码:
function compose(){
const args = [].slice.apply(arguments) // 把类数组arguments变成数组
return function(data){
let _result = data
for(let i = args.length -1 ;i>=0;i--){
_result = args[i](_result)
}
return _result
}
}
需求:
让一个整数,先加一,再乘2。
这是一个很简单的需求,我们主要看怎么通过函数式编程的形式去实现这个需求。
简单的例子更容易看清楚本质的内核。
function addNum(num){
return ++num
}
function multiply(num){
return num *2
}
let result = compose(multiply,addNum)(2)
console.log(result)
可以看到,通过封装的compose函数,我们只需要传入要执行的步骤函数,调用的时候传入参数,就可以很优雅的实现需求、