第5章 部分应用和复合
一等值的函数,是函数式编程的基石。部分应用和复合,则是函数式编程的重要特征。采用命令式编程时,每当我们感觉需要抽象出一个新的功能时,就会定义一个函数。在函数式编程中,被同样需要的新函数,往往无需定义,就能像变魔术一样产生,两位魔术师的名字就叫做部分应用和复合。
5.1 部分应用
5.2 柯里化
我们已经体会到部分应用一个函数的好处,那么对部分应用得到的函数,假如有再次部分应用的必要,自然没有理由不能这样做。还是以rangeRoutine2函数为例。对rangeRoutine2函数的step参数进行部分应用,得到一个产生间隔为1的序列的函数range,这个新函数能满足绝大多数情况的需要,使用起来又比原函数方便,就像调用rangeRoutine函数时省略step参数一样。接下来,大部分场景中序列的起点为0,为此可以对range函数的start参数进行部分应用,得到一个调用时只需提供一个参数的rangeFrom0函数,就像调用rangeRoutine函数时省略start参数一样。更为灵活的是,对于需要序列的起点为其他数字的场景,可以对range函数的start参数用该数字进行部分应用,比如rangeFrom1函数返回的就是以1为起点的序列。
const range = f.partial(rangeRoutine2, 1);
const rangeFrom0 = f.partial(range, 0);
const rangeFrom1 = f.partial(range, 1);
f.log(rangeFrom0(10));
//=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
f.log(r