美文网首页
函数式编程和柯里化的定义

函数式编程和柯里化的定义

作者: 吴晗君 | 来源:发表于2019-04-19 21:46 被阅读0次

    函数式编程

    函数式编程是一种编程范式。它把计算当成是数学函数的求值,从而避免改变状态和使用可变数据。它是一种声明式的编程范式,通过表达式和声明而不是语句来编程

     function compose(...funcs) {
         if (funcs.length === 0) {
           return arg => arg
         }
    
         if (funcs.length === 1) {
           return funcs[0]
         }
         return funcs.reduce((a, b) => {
           return (...args) => {
             return a(b(...args)) 
           }
         })
       }
    
       function fn1(x) {
          console.log('a')
          return x + 1
        }
    
        function fn2(x) {
          console.log('b')
          return x + 2
        }
    
        function fn3(x) {
          console.log('c')
          return x + 3
        }
    
        function fn4(x) {
          console.log('d')
          return x + 4
        }
        let composedFn = compose(fn1,fn2,fn3,fn4)
        let result = composedFn(1)
    

    第一步,循环返回的第一个值是函数X,看下一步,所以X的参数就是fn3的返回值,
    也就是说fn2的参数就是fn3的返回值

    (...args) => {
       return fn1(fn2(...args)) 
     }
    

    第二步, 循环返回的第二个值是函数Y

    (...args) => {
      return X(fn3(...args))
    }
    

    第三步,reduce返回的第三个值是函数Z,这个函数作为reduce的最终返回值赋值给了composedFn

    (...args) => {
      return Y(fn4(...args))
    }
    

    第四步,执行composedFn(1),也就是上一步fn4的参数是1.连起来执行就是从后往前一个一个执行

    let composedFn = compose(fn1,fn2,fn3,fn4)
    let result = composedFn(1)
    

    柯里化

    计算机科学中,柯里化(英语:Currying),是把接受多个参数函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。

    上面redux的例子中函数式编程用的很好,柯里化还真没在网上看到好的例子,全是a+b的例子...

    相关文章

      网友评论

          本文标题:函数式编程和柯里化的定义

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