js-函数式编程

函数式编程,顾名思义,是使用函数的形式来编程,随着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可以把任何两个纯函数结合到一起。当然你也可以扩展出组合三个函数,甚至多个函数的组合。。。

至此,我们可以使用函数式来编写很多的应用场景。。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值