我们通过部分应用和函数柯里化来实现输入从抽象到具体,那今天我们来看看如何将方法从具体到抽象,如何实现函数的组合
组合
接下来我们要实现输入出除以二,并判断他是否等于一,我们即要保证函数的单一职责也要确保功能的实现
var isODD=(x)=>equalsToOne(remainderOfTwo(x));
var remainderOFTwo=dividedBy(2)
var equalsToOne=equalsTo(1)
var dividedBy=(x){
return funcation(x){
return x % y
}
}
var equalsTo=(y){
return function(x){
return x===y
}
}
这里我们了解到函数是可以组合使用的,这里我们调用的时候甚至无需传参,就可以实现功能,这也是JS的声明式
管道Pipeline
函数式编程中的管道,是另外一种函数的创建方式,这样创建出来的函数的特点就是上一个方法的结果会作为下一个方法的输入,然后按照顺序执行 Unix和linux也有类似的管道思想
Transduction
函数式编程中的很多概念都来自相对于复杂,动力系统研究与控制等领域,而通过组合和管道,我们再延申一下转导
transducing
转导主要用于控制系统,比如声波作为输入,通过麦克风进入到一个功放,然后功放进行能量转换,最后通过喇叭传出声音的这样一个系统,就可以成为转导
这个概念被用于react.js中的reducer,他最主要解决的是在大型数组,进行多次map,filter。reduce的性能问题,使得输入的数组只被处理一次,直接输出结果,而不需要中间数组

这样的代码会产生一系列的中间数组