JS函数式编程02--柯里化和函数组合

柯里化

柯里化是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
柯里化帮助我们将任意多元函数变为一元函数处理。

柯里化实现的意义?

实现柯里化到底有啥意义或者好处呢?

  1. 代码能够更好的复用
  2. 这是对函数参数的一种缓存
  3. 让函数更灵活,让函数的粒度更小,便于函数组合产生最大的功能

柯里化的用法

我们举一个很简单的例子,实现一个年龄比较大小方法

  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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。