JavaScript程序员Web前端之路

第五章 由函数构建函数

2017-03-26  本文已影响70人  549b968de8fa

5.1 概念

我们前面讲了很多,同时也讲到了由函数构建函数的概念。

在函数式编程中,函数是构建大型函数或项目的最小单位,就像分子是独立存在而保持物质化学性质的最小粒子一样。

这里就不再重复地叙述这一观点了,掌握住思想,这就足够了。你所需要做的就是像切面包一样,把一个大型函数切割成你所需要的状态就足矣。

5.2 函数柯里化

函数柯里化的概念是在函数式编程语言 Haskell 中最基本的要素,在这一门语言中,就要使用柯里化,而在 JavaScript 中,这真的重要吗?

这也是我一直在问自己的问题,究竟什么样的地方,才能真正用到这一技术。为了技术而技术,将会导致一个问题,那就是更多的 BUG 以及更多的维护。

在团队协作中,将函数切割成无数的小函数,这有利于代码的维护和扩展,而柯里化呢?至少在 ES6 大行其道的现在,我看不出它的优势在何处。

那么什么是柯里化?

函数柯里化就是为每一个逻辑参数返回一个新函数。

多说无益,我们来举一个例子吧:

function add(x, y, z) {
  return x + y +z;
}

这是我们平时的一般写法,那么柯里化是什么样子的呢?

function add(x) {
  return function(y) {
    return function(z) {
      return x + y + z;
    }
  }
}

add(1)(2)(3);  // 6

这么写是不是很丑呢?我不知道。但是这样会把问题弄得让人很费解不是吗,接着呃我是用 ES6 来重构上述代码:

const add = (x, y, z) => x + y + z;

const add = x => y => z => x + y + z;

你能说,柯里化后的代码就比上面的更好吗?这一点我真的不是很清楚。

到目前为止,我相信你应该知道了柯里化是什么,但是会不会用,为什么用需要想的很清楚。对于我来说,柯里化真的不适合 JavaScript 这门语言的大多数情况,这只会使得我们为了使用它而使用它。

还记得我们一开始就提到的吗?函数式编程为我们提供了一套思路,但这并不代表我们就要摒弃其它的东西。

真正的大师是选择合适的情况使用合适的手段,而高手则是为了炫技而陷入杀鸡焉用宰牛刀的境地中。

上一篇 下一篇

猜你喜欢

热点阅读