函数式编程语言 书籍
函数式编程(Functional Programming)相比面向对象编程(Object-oriented Programming)有哪些优缺点?
面向对象编程(OOP),是命令式编程的类型系统发展到一定阶段的必然产物。而 命令式编程,背后的数学原理是 图灵机。
图灵机→命令式编程→OOP
函数式编程(FP)则直接从 数学中的 λ演算 发展而来,其类型系统继续发展就是 面相范畴编程。
λ演算→FP→面相范畴编程
早在上个世纪,计算机出现之前,图灵就在数学上证明了 图灵机 和 λ演算 的等价性。这在理论上,说明,OOP 能实现的 FP 都能实现,反之亦然。同时,还说明 OOP语言 也可以提供 FP 的机制,反之亦然。事实上,现在的通用语言都是这么干的,例如:C#、Java、C/C++、Python 等 都提供有 λ表达式;R、Commonlisp、JavaScript、Ocaml、Haskell 等 都支持OOP。
OOP的优点是符合人类看待世界的方式:类-对象-属性(方法),非常适合在程序架构上使用,结合设计模式,几乎可用于各种程序架构当中。缺点是不够灵活不适合算法,用于实现***响应的代码笨重 等。FP刚好相反,优点是灵活轻巧,适合算法、***代码。缺点是以函数为中心的思维方式太过数学化,并且使得程序的架构庞杂,不易维护。所以,可见,最好的办法是OOP和FP配合使用。
面向对象特别符合人类对世界认知的思维模式。oop的兴起源于,大型软件系统的开发对代码管理、复用、扩展的一种需要。oop为代码结构的合理性,提供了更多设计的可能和空间。oop的三大特征,封装,继承,多态其实都是表面特征,oop真正的灵魂是抽象,这个概念贯穿在oop语言的各个层面和开发的各个环节,所以能深刻理解抽象,才能深刻的认识oop,才能把oop的优势发挥出来。
函数式编程是个很古老的东西,它之所以今天能再被重用。是因为数据量的激增和硬件高速发展带来的多核处理需求。函数式最大的特点是无状态,它没有变量,因此它天生线程安全,这决定了它特别适合高并发,大数据量的处理。
面相对象和函数式,都是从语言特性层面得到支持的一种编程思想,他们之间并不矛盾,并不是两种对立的思想。因此,完全可以取他们的优势,来进行开发,这也是未来开发语言发展的一个方向,就是多范式编程,也就是同时支持面相对象和函数式,现在一个最典型的代表就是scala。
函数式编程代表语言lisp, 编出的程序比较短,适合简短的程序。数据一般是列表方式。函数式编程只适合函数变量比较简单的情况。
面向对象编程更容易理解识别变量,适合大规模编程。数据一般是数据库。面向对象编程变量不容易混淆,也允许变量缺省,适合编游戏。面向对象编程,变量,函数是封装的。所以不容易***扰。适合更复杂的情况。
函数是先出现的概念,更容易理解一些。函数式编程有点像第一人称的文章。对象编程是第三人称写的小说。它有人的名字,动作可以是类似的。
可以先从函数编程学起。过渡到对象编程。更自然一些。
为什么函数式编程正在上升
编程范例是一个术语,用于描述编写命令的方法。 语言的真正思想是建立在其编程范例之上的。 最著名的三种范例是面向对象的程序设计,命令式程序设计和函数式程序设计。 任何一种意识形态都不会比另一种更好,因为通常它是关于使用正确的工具完成工作的。
函数式编程是大多数软件工程师至少对此不太熟悉的概念。 实际上,有史以来写给程序计算机的第二种编程语言Lisp完全在功能范式内。 通过简化的定义编程,函数式编程将数据的不变性和数学计算作为优先事项,而不是传统上修改[_a***_]在类构造函数中的部分对象。 在现代函数式编程中,这个想法有些冗长,不一定是一件坏事。 函数语言的可变性带来了更多实用性,我敢说:
功能性
功能编程。 考虑到这一点,函数式编程不限于函数式语言。 例如,Python具有功能特性。 尽管从传统上讲,函数式编程已经有了令人难以置信的不同,但是函数式和面向对象的范例似乎与大多数用于数据科学的语言有点相似。
我们做的伟大的事情
大多数功能语言的标题均带有"统计"字样。 这很方便,因为数据科学家非常像统计学家,只需要具备编程和机器学习技能即可。 函数式语言通常可以更快,而对于数据科学家而言,最重要的是更容易。
相信我,您不想浏览C代码,因为您的准确性有点低。 大多数功能语言都是完全可读的,并且很容易键入和掌握。 对于某些人来说,知道函数式编程是许多Internet上最古老的大数据管道的基础,可能会令人感到意外。 实际上,随着机器学习和统计计算的兴起,函数式编程实际上变得越来越流行。
炫酷的编程语言
[免责声明]本文来源于网络,不代表本站立场,如转载内容涉及版权等问题,请联系邮箱:83115484@qq.com,我们会予以删除相关文章,保证您的权利。转载请注明出处:http://www.wnpsw.com/post/15724.html