如何通俗的理解函数柯里化这个概念,大神们举例说明吧
在一个函数中首先填充几个参数,然后再返回一个新函数,通俗吧
function add(a){
var sum = 0;
sum += a;
return function(b){
sum += b;
return function(c){
sum += c;
return sum;
}
}
}
add(1)(2)(3);//6
13 回答12.6k 阅读
7 回答1.8k 阅读
5 回答1.3k 阅读
3 回答2.5k 阅读✓ 已解决
3 回答1k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
5 回答2.5k 阅读
https://hackernoon.com/curryi...
题主英文好不,如果还可以的话,读完这篇基本就理解了
updated
不知道你是否有看我之前分享给你的文章。
既然你又更新了一下问题,想了解一下区别,我就简单说一些,如有错误,还望指正。
要理解两者之间的区别,你首先需要明白一个叫做偏函数(Partial Function)的概念,这个东西是
FP
中一个比较重要的知识点,抛去一些学术方面的东西,按我的理解,它是函数式编程中用来复用代码的一种手段,举个例子:如果直接使用二元参数的 add 方法的话,是这样的:
虽然第二种写法比第一种写法代码量少一些,但在调用 add 时,对于业务的描述,与调用者的传参逻辑耦合在一起,但前者的话,就不存在这个问题,对于业务的描述很明显可以通过中间变量的命名来得知,add2 就是与 2 相加,add3 就是与 3 相加。对于 add2 和 add3 这种原子性的方法,你可以将它们独立抽离为一个单另的文件,可读性、可维护性、可测试性都大大提升。
如果直接这么来看,似乎是多此一举,因为我直接使用二元的 add 方法,也可以封装出来 add2 和 add3 的版本,但在
FP
中,一般是通过使用组合(Composition)来实现OOP
中涉及的继承和多态的概念,因此,在上面的例子中,add2 和 add3 在实际的业务工作场景中,一般被抽象为具有原子性的业务逻辑,而这些逻辑互相组合起来,可以形成更加复杂的逻辑,就如同乐高积木一样。但有一个问题就是,我们平时用的函数,不可能所有的都只有一个参数,因此,为了享受这种便利性,又不强迫我们每次写函数的时候,都使用唯一一个参数,使用柯里化来将一个多元参数转化为偏函数。
另外的一些区别就是,柯里化后的函数通过组合,在求值时是惰性的,在业务逻辑十分繁杂的情况下,性能会好一些。