函数式编程,顾名思义,是使用函数的形式来编程,随着react居高不下的人气,函数式编程逐渐流行了起来。为什么要使用函数式编程,能给我们带来哪些好处呢?下面将一一介绍:
纯函数的定义:
对于相同的输入,永远会得到相同的输出,而且没有任何可观察的副作用,也不依赖外部环境的状态。
举个不是纯函数例子:
var min = 18;
var checkage = age => age > min;
在不纯的函数中,checkage 这个函数的行为不仅取决于输入的参数 age,还取决于一个外部的变量 min,换句话说,这个函数的行为需要由外部的环境决定。对于大型项目来说,这种高度依赖外部状态是造成系统复杂性主要原因。
接下来看看纯函数:
var checkage = age => age > 18;
可以注意到,纯的 checkage 函数把关键数字 18 硬编码在函数内部,扩展性比较差。这肯定是我们不希望看到的?怎么去解决这个问题呢?我们可以使用函数柯里化优雅的解决这个问题。
函数柯里化的定义很简单:传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数。
看个例子:
我们可以对上面的函数进行柯里化
var checkage = min => (age => age > min);
var checkage18 = checkage(18);
checkage18(20);
// =>true
当然这种写法很难接受,而且用这种写法我们很容易写出"包菜式"的代码,比如”
h(g(f(x)));
为了解决这种嵌套式的代码,我们需要用到函数组合
//两个函数的组合
var compose = function(f, g) {
return function(x) {
return f(g(x));
};
};
//或者
var compose = (f, g) => (x => f(g(x)));
var add1 = x => x + 1;
var mul5 = x => x * 5;
compose(mul5, add1)(2);
// =>15
我们定义的compose可以把任何两个纯函数结合到一起。当然你也可以扩展出组合三个函数,甚至多个函数的组合。。。
至此,我们可以使用函数式来编写很多的应用场景。。