1.如果你需要编写优秀的并发程序
在如今这个设备已经进入多核的时代,学习如何编写健壮的并发代码已经不再是一个候选项了。函数式编程提供一个思考并发的正确原则,并且催生了几个更高级别的并发而让并发工作更加简单。编写健壮的并发代码不再只是少数聪明人的游戏。
2.大多数程序只是在进行数据的管理
当你每天接收TB级别的数据,当你需要清洗、存储PB级别的数据并且需要对它们进行分析时,任何有关对象方面的开销对你来说都是难以接受的。尽管ORM和对象中间件在面向对象时代大受好评,因为我们可以通过直接操作业务对象从而尽量避免与SQL语句打交道。然而,它们性能开销在这个数据时代日渐被放大。或许在一个小团队里面,性能和存储并不是一个问题,然而,无论在什么团队,团队敏捷性始终是所有团队需要考虑的问题。试想一下,在日复一日,年复一年地程序增强中,团队如何保持灵活?团队如何让代码尽可能地保持简介?函数式编程能够直接地与基本数据集合打交道,最低限度地减少工作中对象模型的开销,同时还能避免复制以及促进重用。
3.函数式编程更加模块化
OOP的出现让许多人认为他们终于找到了一个建立可重用组件,大大减低成本和开发时间。然而,事实并不像人们想象的那么美好。绝大部分成功的可重用的库仅仅只是JDK、Spring框架等。剩下的那些我们需要的代码,我们不断地在一个工程接着一个工程去重写。对象的近乎无限的灵活性实际抑制了重用的潜力,因为在对象与对象如何进行互联我们都没几条统一的标准。其实,对象归根结底也只是数据的集合,这么看来,我们就找到一条更好的比对象低层次的标准抽象的路。这些标准就是基本集合如list、map和set以及一些原生的类型像数字定义明确的域概念(例如,金钱在金融应用)。总而言之,函数式编程定义了更加有用、容易重用、组合以及测试的抽象。
4.更快的工作效率
在开发周期越来越短的今天,敏捷开发越来越被重视。函数式编程能够使我们在需求不断改变、特定领域知识理解出现错误地情况下能够快速而从容地面对。
5.回归简单
函数式编程是为了对抗偶发复杂性(accidental complexity)而作出的反击,这种复杂性是我们认为添加上去的,而不是问题域的固有复杂性。
以上笔记来自 《Functional Programming for Java Developers》作者Dean Wampler 第一章Why Funtinal Programming?