面向对象好好的,为什么函数式编程就火了?

发布于 2022-09-12 02:43:31 字数 39 浏览 28 评论 0

我的理解是面向对象对数据处理的抽象不太好?才引入了函数式编程。。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

尐偏执 2022-09-19 02:43:31

面向对象抽象是最好的,缺点是太复杂,有时候为了实现一点小功能就要写很多代码,就像原先最古老版本的java要调用一个回调函数得先定义一个类去实现回调的接口方法,后来java觉得太麻烦又搞了个匿名类,结果四不像既不方便又难以理解,后来java8引入lambda之后,才能优雅的实现回调。

所以函数式编程其实抽象不好,但很方便,很少的代码就能实现面向对象的繁杂的定义。

另外函数式编程起源于很久以前的人工智能研究,但真正火起来应该是在反应式编程流行之后,异步流式处理需要大量回调,如果用当时主流的面向对象去处理简直就是噩梦,然后大家才想起函数式编程。

昔梦 2022-09-19 02:43:31

函数式编程不是面向对象的对立面,二者不是一个层面上的东西。

函数式编程(如 Lisp、Haskell)是与命令/指令式编程(如 Basic、Fortran、C、C++、C#、Java、Perl、Python、Ruby、Smalltalk)和声明式编程(如 CSS、HTML、SQL)相对应的。

面向对象编程是和面向过程编程相对应。

比如 C / Fortran,它俩是面向过程的,但却和面向对象的 C++ 同属于命令式编程的范畴内。

但其实这种界限已经被慢慢打破了,很多命令式编程的语言也在慢慢加入函数式的特性,比如 C# 中的 Linq、Java 中的 Stream、Python 中的 Functools。基本可以说只要支持 Lambda 的语言就都有函数式的特性,只不过是以面向对象的方式引入的,如静态类或抽象类。

所以上面三种并不和下面两种有啥关系,分类方式不同而已。


P.S. Lisp 1960 年就有了,而第一个和第二个所谓面向对象语言,即 Simula 67 和 Smalltalk,都分别是 1967 年和 1971 年的事儿了。所以你说的函数式编程是后引入的,是不对的。

撩心不撩汉 2022-09-19 02:43:31

函数式编程一直在学术界都很火。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文