美文网首页
JS函数式编程02--柯里化和函数组合

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

作者: 小q | 来源:发表于2020-06-10 16:55 被阅读0次

    柯里化

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

    柯里化实现的意义?

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

    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

    相关文章

      网友评论

          本文标题:JS函数式编程02--柯里化和函数组合

          本文链接:https://www.haomeiwen.com/subject/rkketktx.html