您应该了解的5种功能性编程语言

如果您花费大量时间阅读Internet上的编程趋势,就会听说过函数式编程。这个词经常被使用,但这是什么意思?

即使您知道什么是函数编程,也可能不清楚哪种语言最适合它。毕竟,并非所有的编程语言都是一样的。尽管您可以在多种语言中应用函数式编程范例,但仍有一些地方会让您感到更加自在。

什么是函数式编程?

如果您具有数学背景,您可以在函数式编程方面抢先一步。这是因为函数式编程范例将计算视为数学函数。如果您没有数学背景,这可能会让您感到困惑。

基本上,函数式编程将函数和数据视为不可变的。您将数据传递到一个函数中,它通常返回转换后的数据或某种其他类型的数据。在函数式编程中,函数绝不能更改原始数据或程序状态。

与Unix哲学相似,即每个程序都应该做好一件事情。函数不应触及程序的各个部分。相反,它应该接受输入并为您提供输出。

理想情况下,在函数式编程中,函数应尽可能是纯函数。这意味着在给定相同输入的情况下,函数的输出将始终保持不变。

这与面向对象编程之类的东西大相径庭。在面向对象的编程中,您通常会拥有一个基础对象,该基础对象具有专用于更改属于该对象的数据或状态的各种方法。如果未明确说明,则方法甚至可能更改数据或状态。

在实际程序中,有时这很有意义。也就是说,由于并不总是清楚是什么在改变状态或数据,它会使程序更难以维护。函数式编程最初是在学术环境中使用的,但也可以帮助防止这类问题。

1。 JavaScript

某些编程语言允许函数式编程,而其他一些则鼓励甚至强制执行它。 JavaScript属于第一类。尽管您可以使用该语言中的功能编程范例,但也可以轻松地使用面向对象的方法。

也就是说,JavaScript内置了许多功能编程范例。以高阶函数为例。这些函数可以将其他函数用作参数。

JavaScript有一些函数可以与数组一起使用,例如 map() reduce()

类似于JavaScript,Python是一种通用语言,您可以使用任何数量的编程范例。 Python可能有其缺点,但功能编程不是其中之一。甚至在官方的Python文档中也对函数式编程进行了介绍。

首先,您会发现许多相同的 map() filter() reduce()以及上述内置的类似功能。与JavaScript一样,它们是高阶函数,因为它们将其他函数作为参数。在Python中,函数式编程以 lambda 关键字的形式具有优势。

您可以通过几种方式使用lambda表达式。一种使用方法是简单函数的简写形式。分配给变量后,您可以完全像标准Python函数一样调用lambda表达式。当您将lambda表达式用作匿名函数时,真正的优势就体现出来了。

此列表中的匿名函数也可以使用JavaScript和其他语言。当与高阶函数一起使用时,它们特别方便,因为您可以在现场定义它们。如果没有匿名功能,则您甚至必须将简单的添加项预先定义为定制功能。

3。 Clojure

与JavaScript和Python不同,Clojure可能不完全是家喻户晓的名字,即使在程序员中也是如此。如果您不熟悉,Clojure是Lisp编程语言的一种方言,它可以追溯到1950年代后期。伴随着它的是一种非常具体的做事方式,恰好适合于功能编程。

与其他Lisp方言一样,Clojure将代码视为数据。这意味着代码可以有效地改变自身。与其他Lisp方言不同,Clojure在Java平台上运行,并被编译为JVM字节码。这意味着它可以与Java库一起使用,无论它们是否用Clojure编写。

与该列表中以前的语言不同,Clojure是一种全新的功能性编程语言。这意味着它尽可能地倡导不变性。

Clojure并不期望所有程序在数学上都是“可证明的",而是鼓励尽可能使用纯函数。

4。 Elm

该列表中的一种新语言,Elm是一种纯功能性语言,最初由Evan Czaplicki于2012年设计。该语言在Web开发人员中日益流行,特别是用于创建用户界面。

与该列表上的每个先前条目不同,Elm使用静态类型检查。这有助于确保没有运行时异常,而是在编译时捕获错误。这对用户来说意味着较少的可见错误,这是一个主要优点。

Elm编译器针对HTML,CSS和JavaScript。就像您可以使用Clojure编写在Java上运行的程序一样,您可以编写使用Elm中的JavaScript库的应用程序。

Elm与其他语言之间的一个主要区别是,您不会找到通用的 filter() map()和类似的功能。而是由数据类型定义的,例如 List.map Dict.map

Haskell是另一种静态类型的纯函数式语言。与Elm不同,Haskell已经存在了一段时间。该语言的第一个版本是在1990年设计的。最新标准是Haskell 2010,而下一个版本则计划在2020年。

正如我们已经探究的那样,Haskell的纯粹功能性意味着通过设计,功能不应该有副作用。尽管函数式编程起源于学术界,但它仍然非常适合解决现实世界中的问题。

尽管Haskell缺乏主流的流行,但它已被用于一些广泛使用的项目中。 Xmonad窗口管理器完全用Haskell编写。 Pandoc可以将不同类型的标记转换为其他格式,也可以使用其他语言。

标准的 map() filter()函数式编程 JavaScript Python

分类本周热门