函数式编程,我心中的 C 位!
IT服务圈儿
有温度、有态度的IT自媒体平台
实际上,大多数软件工程师对于函数式编程的概念并不太熟悉。
译者 | 弯月,责编 | Elle
出品 | CSDN(ID:CSDNnews)
以下为译文:
编程范式指的是编写命令的方法。编程语言的思想正是建立在其编程范式之上。最常见的三种范式分别是面向对象程序设计、命令式程序设计和函数式程序设计。这三种思想体系并无优劣之分,通常我们都需要选择正确的工具来完成工作。
大多数软件工程师对于函数式编程的概念并不太熟悉。实际上,历史上的第二个编程语言Lisp就属于函数式范式。函数式编程简化了编程的定义,传统编程非常注重修改存储在类构造函数中的对象,而函数式编程则优先考虑数据的不变性和数学计算。在现代函数式编程中,这种思想有点冗长,但这不一定是一件坏事。函数式编程语言的可变性非常实用,我敢说函数式编程非常实用。
如此说来,函数式编程不限于函数式语言。例如,Python 也拥有函数式特性。尽管现代函数式编程已与传统的函数式大相径庭,但是似乎大多数用于数据科学的语言都采用了函数式和面向对象的范式。
01
很适合我们当前的工作大多数函数式编程语言的标题均带有“统计”字样。这很方便,因为数据科学家与统计学家很相像,只是他们还掌握了编程和机器学习的技术。函数式编程语言的速度很快,而且最重要的是,对数据科学家而言,函数式编程语言更容易使用。
没人喜欢浏览C代码,因为C的可读性不太好。而大多数函数式编程语言都具有可读性,而且很容易输入和上手。你甚至不会想到,互联网上许多早期的大数据流水线使用的都是函数式编程。实际上,随着机器学习和统计计算的兴起,函数式编程也越来越流行了。
02
了不起的语言我们有很多了不起的统计语言,其中许多语言能够将自己的特征和其他传统的特征融合在一起。我喜欢很多函数式编程语言。
Julia
Julia 一直都是我最喜欢的编程语言。虽然 Julia 是实打实的函数式编程语言,但它还包含一些可变和类似于对象的属性,因此十分方便编写程序。作为一种高级语言,Julia 的速度非常快。它的类型声明很容易,而且如果有了恰当的类型定义,它可以与 C 一样快,同时比 R 和 Scala 易于阅读。通常,你不需要花费太多时间就可以用 Julia 建立模型并进行训练,而且由于语言简单易用,机器学习的速度很快,因此使用 Julia 拥有很大优势。在某些情况下,例如使用我的机器学习软件包 Lathe 时,只需很少的代码就可以完成机器学习,而且可以通过参数多态性轻松地修改构造函数的属性。
Lisp
尽管 Lisp 在数据科学领域名不见经传,但它仍然是一种非常酷的语言。Lisp 和 Julia 一样,是一种非常方便使用的编程语言。值得一提的属性之一是 Lisp 的宏和 Julia 的宏。宏本身是重要的函数式特征,如果使用得当,在 notebook 中编写代码就会非常容易。应该注意的是,Lisp 本身还可以分成一系列语言,包括Scheme,Clojure 和(通用)Lisp。作为历史上的第二个高级编程语言,我们很难估计 Lisp 及其功能的影响,但我敢说影响范围肯定很深远。
R语言
下面让我们来谈一谈老朋友 R。从传统意义来看,R语言是一种函数式编程语言,但是与大多数其他语言一样,R语言也属于多范式,这意味着它可以从各个编程范式中进行选择。这是一种优势,因为R语言可以利用可变性。R语言源自S语言,并且一直专注于统计计算。
Haskell
Haskell 与我上面所说的多范式语言完全不同,它是纯粹的函数式编程语言。与本文提及的其他语言不同,我从未使用过 Haskell,因此没有太多发表权。但据我所知,Haskell 是一种相当了不起的语言。我对 Haskell 的了解很局限。如上所述,大多数现代语言都是多范式的,因此它们可以更有效地消灭bug,同时又无需创建新的代码库。
03
总结在工作中,我最常用的都是函数式编程语言,主要是Julia,而GitHub代码库主要保存的也是 Julia notebook。我喜欢函数式编程,因为它非常适合我当前的工作。当然,有时候用 Python 的构造函数(类)来处理某个特定的工作可能会更好,但是总的来说,Julia 也可以胜任,而且我觉得用 Julia 编程非常流畅且高效。对于有些人来说,可能函数式编程语言无法完成他们的目标,而且对于一生都在使用面向对象语言的人来说,可能学习函数式编程语的难度很大。归根结底,语言只是一种选择,大多数语言都有一批忠实的拥护者,而且大多数语言都有优点和缺点。
原文:https://towardsdatascience.com/functional-programming-is-awesome-c94bcd150ae6
本文为 CSDN 翻译,转载请注明来源出处。*版权声明:转载文章和图片均来自公开网络,版权归作者本人所有,推送文章除非无法确认,我们都会注明作者和来源。如果出处有误或侵犯到原作者权益,请与我们联系删除或授权事宜。