我的理解是面向对象对数据处理的抽象不太好?才引入了函数式编程。。
面向对象抽象是最好的,缺点是太复杂,有时候为了实现一点小功能就要写很多代码,就像原先最古老版本的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 年的事儿了。所以你说的函数式编程是后引入的,是不对的。
函数式编程一直在学术界都很火。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(3)
面向对象抽象是最好的,缺点是太复杂,有时候为了实现一点小功能就要写很多代码,就像原先最古老版本的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 年的事儿了。所以你说的函数式编程是后引入的,是不对的。
函数式编程一直在学术界都很火。