函数式编程
当你的写的代码别人看着非常精简,但是又不会被一下子被看懂!说明你离大神差不远了。哈哈~~
1 什么是函数式编程?
函数式编程是指通过复合纯函数来构建软件的过程,它通过纯函数将应用状态流转,避免了共享的状态、易变的数据以及副作用。
嗯,这种解释觉得很深奥?没关系,往下看~
在了解之前,有必要了解一下ES6的简介
1.function函数写法简写
let func = function () {
// do something...
}
简写为:
let func = () => {
// do something...
}
如果只有参数有返回值的情况:
let func = (a, b) => {
return 'something'
}
如果只有一个参数有返回值的情况:
let func = res => res + 1
如果有参数且返回函数的情况:
let func = res => (() => {})
注意:最后一种情况将或多或少的和函数式编程有些关系:继续往下看:
let func = function (a, b) {
return a + b
}
上例函数仅仅是对参数a, b做简单的相加并返回。但是却可以这样写:
let func = function (a) {
return function (b) {
return a + b
}
}
加上e6写法后:
let func = a => (b => a + b)
结论:上述写法将一个多参的函数转化为单参函数依次将结果传递出来,通过这种方式得到对参数有记忆过程的函数,说白了,可以理解为实现了对参数的"缓存"过程。这种现象有一个专业的叫法:函数柯里化。
但是:柯里化也有一个不好的问题,如果是很多个参数,一层嵌一层会比较麻烦,出现洋葱代码不是我们希望看到的。为了解决这种现象,我们需要-函数组合
2.函数组合
let mixn = (a, b) => (x => a(b(x)))
分析:上述代码通过mixn描述了一种关系:当参数a,b传进来且mixn执行后,返回一个依据a、b、x建立一种关系的函数。来个实例理解一下:
需求:想要建立一种关系,让一个函数执行时根据参数(函数)对数据进行处理
let hander = mixn(res => res + 1, para => para * 2)
hander(2)
// 5
抽象写法:
const com2 = (...arges) => (x => arges.reduceRight((x,b) => {return b(x)}, x))
// 测试一下
let func = (ele) => {
return ele + 2
}
let compose = com2(func, func, func)
compose(4);
// 10
待续。。。