前端学习之函数式编程 — 函数组合

Posted 萌萌的DDD

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前端学习之函数式编程 — 函数组合相关的知识,希望对你有一定的参考价值。

Part 01 函数组合

  • 纯函数和柯里化很容易写出洋葱代码=====>h(g(f(x)))一层一层套起来不宜阅读
    • 例如:获取数组最后的一个元素再转大写字母 _.toUpper(_.first(_.reverse(array)))
  • 函数组合可以让我们把细粒度的函数重新组成一个新的函数

管道

管道代表了使用函数处理数据的过程,给fn函数输入参数a,返回结果b,可以想想a数据通过一个管道得到

 a为输入值,fn处理a ,得到输出b,但当Fn处理过程较长时,出现问题无法精准定位,因此我们可以拆分处理过程。

 将fn拆分为f1 f2 f3 得到m n 作为输出值  最后输出n,这样那个处理过程出现问题可以单一进行解决。

fn = compose(f1, f2, f3)
b = fn(a)

part 02 函数组合概念

  • 函数组合(compose):如果一个函数要经过多个函数处理才能得到最终值,这个时候可以把中间过程的函数合并成一个函数
    • 函数就像数据的管道,函数组合就是把管道链接起来,让数据通过多个管道形成最终结果
    • 函数组合默认从右到左执行
// 函数组合演示

function compose(f1, f2) {
    // 输出函数 形参为最初接受的结果
    return function(value) {
        // 返回最终结果
        return f1(f2(value))
    }
}

function reverse(array) {
    return array.reverse()
}

function first(array) {
    return array[0]
}

// 由右到左执行  因此反转函数在最右侧
// 反转并返回数组第一个值
const last = compose(first, reverse)


console.log(last([1, 2, 3])) // 3

 


part 03 函数组合 --- 结合律

  • 函数组合要满足结合律
    • 我们既可以把g和h组合,还可以把f和g组合,结果都是一样的
// 结合律

let f = compose(f,g,h)

let value = compose(compose(f,g),h)

// true

以上是关于前端学习之函数式编程 — 函数组合的主要内容,如果未能解决你的问题,请参考以下文章

前端学习之函数式编程—高阶函数

前端学习之函数式编程—闭包

前端学习之函数式编程—柯里化

前端学习之函数式编程—纯函数

Scala学习之函数式风格编程

Python学习之函数式编程