函数式编程出现已经有很长的历史了,最近几年由于多核CPU与分布式系统的广泛应用、人工智能的兴起,以及人们对高并发、高性能、高可用软件的强烈需求,它再次进入业界视野,受到大家的重视。
函数式编程的特点是适应分布式系统的开发、程序可证明、代码简洁、运行时错误少、可维护性强。对于个人开发者来说,了解函数式编程,能拓宽视野,提高逻辑思辨能力,让自己的代码更加的优雅和健壮。
OSCHINA 本期高手问答( 2020 年 8 月 25 日——2020 年 8 月 30 日 ) 我们请来了杜万老师@vangie 和大家一起探讨关于函数式编程的优缺点,以及如何学习函数式编程。
问答主题
本次问答主要包括以下方向:
- 函数式编程的优势是什么?
- 学习函数式编程的难点在哪里?
- 函数式编程未来的发展前景如何?
有其他相关的问题,也欢迎提问。
嘉宾简介
杜万,15年Java Web开发经验,曾主导研发过Coding WebIDE,擅长互联网应用架构,热衷于整合框架和开发工具,先后翻译并出版了《Elixir程序设计》《函数式编程入门:使用Elixir》。2018年加入阿里云,先后负责函数计算的工具链和云效云端工作台的研发工作。
为了鼓励踊跃提问,华科大出版社会在问答结束后从提问者中抽取5名幸运会员赠送《函数式编程入门:使用Elixir》一书。
天猫:https://detail.tmall.com/item.htm?id=620896830222
OSChina 高手问答一贯的风格,不欢迎任何与主题无关的讨论和喷子。
下面欢迎大家就相关问题向杜万老师 @vangie 提问,请直接回帖提问。
@vangie杜万老师,你好。
关于“函数式”和“面向对象”思考问题的角度,我听过一个说法“函数式抽象出一个个动词,面向对象抽象出一个个名词”。
杜万老师对此说法怎么看?关于“函数式”和“面向对象”思考角度的区别,杜万老师有什么别的见解?
在实际项目中,杜万老师的经验里,解决什么类型的问题“函数式”比“面向对象”要实用?解决什么类型的问题“面向对象”比“函数式”要实用?
@vangie 您好,请问函数式就是不建立对象吗类似c?不是面向对象更加直观吗?
函数式优点真的很多,但个人感觉多范式更好一些,比如像scala这种集成了面向对象编程和函数式编程各种特点
@vangie 你好,个人觉得阻碍函数式编程普及的一个难点就是难以测试
无论是个人DEBUG还是做单元测试
抽象程度这么高的写法,可读性也是问题。
如果想在TEAM内普及函数式编程,请问您有哪些经验?踩过哪些坑呢?
@vangie 杜万老师 编写软件最主要的一方面就是要管理好复杂性,而唯一能够阻碍写出好软件的就是我们管理复杂性的能力。函数式编程语言为我们提供了最有力的工具用于管理复杂性, 但是 函数式编程也有不太擅长的场合,比如处理可变状态和处理IO等,而且 函数式编程强调没有"副作用",意味着函数要保持独立, 这就要求程序员对程序各个部分之间的交互细节了如指掌, 通过避免运算单元之间发生交互来实现并行运算 , 这样对于编程人员的的水平,和入门门槛,相比于命令式编程 提高不少
@vangie 杜万老师好
我个人认为在系统开发中合理使用函数式编程比为了使用函数式编程而编程效果会好不少,面向对象通俗易懂,在代码的维护及扩展性方面有着良好的优势,但函数式编程的简洁,易用性的优点是不可否认的,我们团队在开发过程中对于集合类的排序、分组强制用lambda实现,但自己设计的程序,根据团队内部的整体能力,我们采用保守的面向对象设计。
在设计函数是编程的时候,团队内部各层次人员参差不一的情况下,使用、推广、培训的落地,您有什么建议呢?
@vangie
请问各种编程语言中,哪些函数式编程用起来快感强,格外爽?
@vangie 函数式与对象式在思维层面上,最主要的改变是什么?