编程工作更多的是解决业务上的问题,而不是计算机的问题,我们需要更为贴近业务、更为抽象的语言,如典型的面向对象语言 C++ 和 Java 等。已经做到了泛型编程
那么如何做更为抽象的泛型呢?答案就是函数式编程(Functional Programming)。
函数式编程
泛型是为了能够抽象,函数式编程 更加抽象
函数式编程,它的理念就来自于数学中的代数。
函数式编程来说,它只关心定义输入数据和输出数据相关的关系,数学表达式里面其实是在做一种映射(mapping),输入的数据和输出的数据关系是什么样的,是用函数来定义的。
特征
- stateless(无状态):函数不维护任何状态。函数式编程的核心精神是 stateless,简而言之就是它不能存在状态,你给我数据我处理完扔出来。里面的数据是不变的。
- immutable(不可变):输入数据是不能动的,动了输入数据就有危险,所以要返回新的数据集。
优势
- 没有状态 就没有伤害。
- 并行执行无伤害。
- Copy-Paste 重构代码无伤害。
- 函数的执行没有顺序上的问题。
劣势
- 数据复制比较严重。
- 纯函数需要花点精力 ,函数式编程的抽象度更大,在实现方式上,有函数套函数、函数返回函数、函数里定义函数……把人搞得很糊涂。
实现方案
把函数当成变量来用,关注描述问题而不是怎么实现,这样可以让代码更易读。
因为函数返回里面的这个函数,所以函数关注的是表达式,关注的是描述这个问题,而不是怎么实现这个事情。
代码变成了在描述你要干什么,而不是怎么干。
函数式语言有三套件,Map、Reduce 和 Filter。
- 面包和蔬菜 map 到切碎的操作上,再把结果给 reduce 成汉堡。