柯里化
柯里化是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
柯里化帮助我们将任意多元函数变为一元函数处理。
柯里化实现的意义?
实现柯里化到底有啥意义或者好处呢?
- 代码能够更好的复用
- 这是对函数参数的一种缓存
- 让函数更灵活,让函数的粒度更小,便于函数组合产生最大的功能
柯里化的用法
我们举一个很简单的例子,实现一个年龄比较大小方法
function checkAge(min){
return function(age){
return age>= min
}
}
const age = checkAge(18)
age(20)//true
age(10)//false
age(18)//true
这样写法可以使代码更好的复用,当你比较其他数字时再获取比较数字的方法就好。
柯里化的原理模拟
柯里化的本质就是把多元函数改为一元函数处理。
//模拟curry
function curry(func){
return function curriedFn(...arg){
if(arg.length < func.length){//如果实际参数的个数小于形参个数,我们要返回一个新的函数
return function () {
return curriedFn(...arg.concat(Array.from(arguments)))
}
}
//实际参数大于等于形参个数
return func(...arg)
}
}
function getSum (a,b,c){
return a + b + c;
}
const curried = curry(getSum)
console.log(curried(1,2,3))
console.log(curried(1)(2,3))
console.log(curried(1)(2)(3))
函数组合
函数组合的概念
若一个函数要经过多个函数处理才能得到最终值,这个时候可以把中间过程的函数合并成一个函数。
- 函数就像数据的管道,函数组合就是把这些管道连接起来,让数据穿过多个管道形成最终结果。
- 函数组合默认执行顺讯是从右往左执行。
下面举一个反转数组后拿到数组第一个元素的功能
function reverse (arr) {
return array.reverse()
}
function first(arr){
return array[0]
}
function compose(f,g){
return function(val){
return f(g(val))
}
}
const last = compose(first,reverse)
last([1,2,3,4,5])
函数组合满足结合律
函数之间的组合满足结合律,意思就是我们现在有f,g,h三个函数,我们既可以先让f,g组合,再与h组合,又可以先让g,h组合,再和f组合。
总结
这篇文章主要总结了函数柯里化和函数组合,下一篇会总结函子的概念和用法。
函数式编程01
网友评论