为何选择功能语言[关闭]

最后都变了- 提交于 2020-03-11 21:57:09

我在这里看到很多关于函数式语言和东西的讨论。 你为什么要使用“传统”语言? 他们做得更好? 他们更糟糕的是什么? 什么是理想的函数式编程应用程序?


#1楼

我会指出你所说的关于函数式语言的所有内容,大多数人在大约20年前都在谈论面向对象的语言。 那时候听到OO很常见:

* The average corporate programmer, e.g. most of the people I work with, will not understand it and most work environments will not let you program in it
* It's not really taught at universities (or is it nowadays?)
* Most applications are simple enough to be solved in normal IMPERATIVE ways

改变必须来自某个地方。 无论受过早期技术培训的人是否认为不需要进行变革,一项有意义且重要的变革将使自己发生。 你是否认为尽管当时所有反对它的人都对OO的改变是好的?


#2楼

如果他不能看到其他艺术的价值,他就无法理解他所选艺术的完美和不完美。 遵循规则只允许在技术上达到一定程度,然后学生和艺术家必须学习更多并进一步寻求。 研究其他艺术以及策略是有意义的。

通过观察他人的活动,谁还没有学到更多关于自己的东西? 学习剑学习吉他。 学习拳头学习商业。 只是研究剑将使你心胸狭窄,不允许你向外生长。

- 宫本武藏,“五环之书”


#3楼

功能语言的一个关键特性是一流功能的概念。 这个想法是你可以将函数作为参数传递给其他函数并将它们作为值返回。

函数式编程涉及编写不改变状态的代码。 这样做的主要原因是对函数的连续调用将产生相同的结果。 您可以使用支持第一类函数的任何语言编写功能代码,但有些语言(如Haskell)不允许您更改状态。 事实上,你根本不应该产生任何副作用(比如打印文本) - 听起来它可能完全没用。

相反,Haskell采用了不同的IO方法:monads。 这些对象包含由解释器顶层执行的所需IO操作。 在任何其他级别,它们只是系统中的对象。

函数式编程有哪些优点? 功能编程允许编码具有较少的错误潜力,因为每个组件都是完全隔离的。 此外,使用递归和第一类函数可以简单地证明正确性,这通常反映了代码的结构。


#4楼

功能语言使用与命令式和面向对象语言不同的范例。 他们使用无副作用的函数作为语言的基本构建块。 这使得许多事情变得更加困难(或者在大多数情况下与人们习惯的不同)。

函数式编程的最大优点之一是无副作用函数的执行顺序并不重要。 例如,在Erlang中,这用于以非常透明的方式启用并发。 因为函数式语言中的函数与数学函数非常相似,所以很容易将它们转换为函数式语言。 在某些情况下,这可以使代码更具可读性。

传统上,函数式编程的一大缺点也是缺乏副作用。 在没有IO的情况下编写有用的软件非常困难,但IO很难在没有功能副作用的情况下实现。 所以大多数人从来没有比从单个输入计算单个输出更多的功能编程。 在像F#或Scala这样的现代混合范式语言中,这更容易。

许多现代语言都有来自函数式编程语言的元素。 C#3.0有很多函数式编程功能,你也可以在Python中进行函数式编程。 我认为函数式编程普及的原因主要是由于两个原因:并发性在普通编程中成为一个真正的问题,因为我们正在使用越来越多的多处理器计算机; 并且语言越来越容易获得。


#5楼

我必须密集,但我仍然没有得到它。 有没有用F#这样的函数式语言编写的小应用程序的实际示例,您可以查看源代码,看看如何以及为什么使用这样的方法比使用C#更好?

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!