Open violet0sea opened 6 years ago
'
某独角兽的面试题
若f(a,b,c,d,e) = a + b + c + d + e;
构造一个函数g,使得
g(a,b,c,d,e) | g(a,b,c,d)(e) | g(a,b)(c)(d,e) | ...= f(a,b,c,d,e)
应用FP的partial application解法
function partial(fn, arity = fn.length) {
return (function nextPartial(prevArgs) {
return function partialed(...nextArgs) {
const args = [...prevArgs, ...nextArgs];
if(args.length >= arity) {
return fn(...args);
} else {
return nextPartial(args);
}
}
})([]);
}
为什么要写FP?一直以来都在使用React技术栈,函数式编程贯穿其间。就在现在,React16.7.0-alpha版本发布在即,引入了React Hooks概念,而此概念的核心便是用function逐渐替代class的写法,大势如此。
函数式优点:
composition 组合函数
将简单的函数组合从而形成一个复杂功能的函数,在数学概念里: f(g(x)) eg: 实现一个数学用算 2 + 3 * 5
key point: 用一个函数的输出作为另一个函数的输入。组合的方式主要使用在数据过滤,通过写几个功能简单的条件过滤函数,通过组合形成功能强大的过滤函数
虽然上述的方式可以实现组合,但是一点也不优雅,可以使用compose高阶函数来实现组合的抽象
待补充