问答

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

作者:admin 2021-08-12 我要评论

我的理解是面向对象对数据处理的抽象不太好?才引入了函数式编程。。 ### 面向对象抽象是最好的,缺点是太复杂,有时候为了实现一点小功能就要写很多代码,就像...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

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

###

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

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

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

###

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

函数式编程(如 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 年的事儿了。所以你说的函数式编程是后引入的,是不对的。

###

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

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 面向对象好好的,为什么函数式编程就火

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

  • php json_decode解码的问题

    php json_decode解码的问题

  • webpack中chunk和assets有什么区别?

    webpack中chunk和assets有什么区别?

  • 使用taos连接出现错误消息, 貌似不影响

    使用taos连接出现错误消息, 貌似不影响

腾讯云代理商
海外云服务器