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