加油,今天周二啦!
感觉身体有恙想找个中医号号脉,转身就发现室友抓了中药买了煎锅;打电话给老中医,老中医还没号脉就说了一句话:年轻人的身体无非就那几个问题,我转脸问了问室友身体咋了,“久病成良医”,室友说的问题我都了解,我继续问老中医:“还吃药吗?” 老中医答道:“吃!”
so? “学”
函数式编程的范式
,所以也有 纯函数
的概念纯函数的维基百科定义:
需产生相同的输出
。输出和输入值以外的其他隐藏信息或状态无关
,也和由 I/O设备产生的外部输出无关
。不能有语义上可观察的函数副作用
,诸如 “触发事件”
,使输出设备输出,或更改输出值以外物件的内容
等。当然上面的定义会过于的晦涩,所以我简单总结一下:
比如:
纯函数在执行的过程中就是不能产生这样的副作用,
副作用往往是产生bug的 “温床”
安心的编写
和 安心的使用
:柯里化也是属于函数式编程里面一个非常重要的概念。
我们先来看一下维基百科的解释:
把接收多个参数的函数,变成接受一个单一参数(最初函数的第一个参数)的函数
,并且返回接受余下的参数
,而且 返回结果的新函数的技术
;维基百科的结束非常的抽象,我们这里做一个总结:
这个过程就称之为柯里化
;图一是柯里化,图二是简化
在函数式编程中,我们其实往往希望一个函数处理的问题尽可能的 单一
,而不是将一大堆的处理过程交给一个函数来处理;那么我们是否就可以将每次传入的参数在单一的函数中进行处理,处理完后在下一个函数中再使用处理后的结果;
比如下面的案例我们进行一个修改:
传入的函数需要分别被进行如下处理
其实也就相当于
function add2(x,y,z){
x=x+2
y=y*2
z=z*z
return x+y+z
}
但如果,在处理x,y, z 各有十行代码时??
柯里化就会让功能清晰
柯里化还有一大好处就是逻辑的复用,比如以下案例,我想找男朋友,得满足4个条件,当我其中一些要求固定时,可以 定制化
,进而实现逻辑的复用
function boy(time){
...
return function (work){
...
return function (habbi){
...
return function (type){
...
}
}
}
}
boy('19岁')('前端')('健身')('狼狗')
var boy_time=boy('19岁')
boy_time('前端')('健身')('狼狗')
var boy_B=boy('19岁')('前端')
boy_B('跑步')('奶狗')
var boy_c=boy('29岁')('后端')('写字')
boy_c('奶狗')
分析代码:
组合(Compose)函数是在 JavaScript 开发过程中一种对函数的使用技巧、模式,比如我们现在需要对某一个数据进行函数的调用,执行两个函数fn1和fn2,这两个函数是依次执行的;那么如果每次我们都需要进行两个函数的调用,操作上就会显得重复; 那么是否可以将这两个函数组合起来,自动依次调用呢?这个过程就是对函数的组合,我们称之为 组合函数(Compose Function);
刚才我们实现的compose函数比较简单,我们需要考虑更加复杂的情况:比如传入了更多的函数,在调用compose函数时,传入了更多的参数: