浅谈函数式编程(一)

拜读了Franklin Risby先生的著作后做一个小小的总结

1.几个概念

纯函数:输入相同时每次调用都会有相同输出的函数,这种函数更加可靠

例:

//纯函数
var a = function (arg){
   return arg
}
//不纯
var sum = 0;
var b = function (arg){
    return sum+=arg
}

简单的来说纯函数就是与函数外部的通信仅仅只有通过传递参数的方式进行,没有依赖外部的变量,纯函数在调试,复用等情况时更加容易用,个人感觉是一个很好的习惯,以后也会尝试着这样去做

函数柯里化(curry):具体的定义不太记得也懒得翻了,大概的方式就是使用闭包去保存一些参数,返回的函数依赖这些保存的参数,在我看来有将一些会复用的参数缺省的意思。

例:

var curry = function (a, b, c) {
    return function(x){
        return a*b*c+x
    }
}
var curry1 = curry(2,3,4)
curry1(5)//29
这种方式在coding过程中非常适用的情况就是数据库连接newDatabaseClient时为了复用代码可能会把user,pass,addr,database等变量当做参数,但是我们每个操作又都需要new一个新的client,所以柯里化函数就显得尤为方便,将user,pass,addr都缺省,最后只要传一个database就可以新建一个client,方便的多。
//大概就这么个意思
var database = function (user, pass, addr) {
    return function (database) {
        return new database(user, pass, addr, database)
    }
}
//那么我们想要用两个不同的数据库时就可以
const database1 = database(user1, pass1, addr1);
const database2 = database(user2, pass2, addr2);
let db1 = database1(database1);
let db2 = database1(database2);
let db3 = database2(database1);
let db4 = database2(database2);

还有一些就是普通的数学方面的一些定律,比如加法的交换律结合律乘法的交换律结合律等等,但是这部分我觉得仁者见仁吧,因为有一些代码不进行结合的原因并不是因为不知道,而是为了代码的可读性更高,与一些业务逻辑结合,使得在其他同事接手后不需要去理清有关数学公式的问题。

水平有限,感谢阅读

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值