我在这里看到了很多有关功能语言和东西的话题。您为什么要使用一种“传统”语言?他们有什么优势?他们最糟糕的是什么?什么是理想的函数式编程应用程序?
#1 楼
功能语言使用的语言范式不同于命令式和面向对象的语言。他们使用无副作用功能作为该语言的基本构建块。这使很多事情变得复杂,并使很多事情变得更加困难(或者在大多数情况下与人们习惯的事情有所不同)。函数式编程的最大优点之一是执行代码的顺序无副作用的功能并不重要。例如,在Erlang中,它用于以非常透明的方式启用并发。
由于函数语言中的函数的行为与数学函数非常相似,因此很容易将其转换为函数语言。在某些情况下,这可以使代码更具可读性。
传统上,函数式编程的主要缺点之一就是缺乏副作用。没有IO编写有用的软件非常困难,但是没有功能上的副作用很难实现IO。因此,大多数人从函数式编程中获得的最大收益莫过于从单个输入计算单个输出。在F#或Scala等现代混合范例语言中,这更容易。
许多现代语言都包含功能编程语言中的元素。 C#3.0具有许多函数式编程功能,您也可以使用Python进行函数式编程。我认为函数式编程之所以流行,主要是因为两个原因:并发在普通编程中已成为一个真正的问题,因为我们越来越多地使用多处理器计算机。语言也变得越来越容易。
评论
您可以用python进行函数式编程,但这确实很糟糕。 stackoverflow.com/questions/1017621/…
–戈登·古斯塔夫森(Gordon Gustafson)
2010-1-28 22:50
用纯函数式语言编写IO代码并不难。它们都提供了一种简单的机制来编写IO代码,就像在命令式语言中一样。他们所做的只是强制您不能在接口被声明为不执行IO的其他代码中调用IO代码。比方说动态语言程序员会抱怨说,像Java这样的静态类型的语言很难从方法中返回她想要的任何类型,因为她必须返回所要返回的类型声明。
–本
2014年2月10日在21:37
Haskell是纯函数语言的示例,它没有您所说的缺点。实际上,由于副作用是经过封装的,因此使副作用的处理变得更加容易,并且使程序员能够实现比命令性语言更强大的抽象级别……确实,每个人都应该尝试Haskell,真正地掌握它并意识到为什么它如此强大。
– FtheBuilder
16 Mar 9 '16 at 0:51
#2 楼
我认为关于“捕捉”编程的功能方法没有任何问题,因为它已经被使用了40年(作为一种编程风格)。每当OO程序员编写支持不可变对象的简洁代码时,该代码就是借用了功能概念。然而,如今,强制执行功能样式的语言越来越多地使用虚拟墨水,这些语言是否会成为现实。未来的主导地位是一个悬而未决的问题。我自己的怀疑是,诸如Scala或OCaml
之类的混合,多范式语言可能会以“纯粹”功能语言为主,就像纯OO语言(Smalltalk,Beta等)影响主流编程一样,但是并没有成为最广泛使用的符号。
最后,我忍不住指出您对FP的评论与我从程序程序员那里听到的评论高度相似以前:
(神话般的恕我直言)的“普通”程序员不理解它。
它没有被广泛地讲授。
任何可以用它编写的程序可以用当前的技术以另一种方式编写。
就像图形用户界面和“代码作为业务模型”一样,这些概念帮助OO受到了越来越多的重视,我相信对不变性和更简单(大规模)的并行性将帮助更多的程序员看到功能方法提供的好处。但是,尽管过去50多年左右我们所学到的内容构成了数字计算机编程的整个历史,但我认为我们仍有很多东西要学习。从现在开始的20年后,程序员会惊讶地发现我们当前使用的工具的原始性质,包括现在流行的OO和FP语言。
评论
只是回首20年。我认为编程并没有发展太多。拥有更好的工具,也许是一门新的语言或2种语言,但从根本上讲并不会改变太多。这将需要20多年的时间。我们都曾经以为我们会在2000年看到飞行汽车。
– bibac
09年1月4日在21:53
奥卡姆虽然是爱尔兰人。
– Defmeta
2009年1月21日15:20
@alex奇怪:在面向对象和命令式编程学校中,“好不变性”和“避免副作用”在相当长的一段时间内一直是很好的经验法则。 (那不喜欢什么?;-)
– joel.neely
09年3月24日在1:26
@bibac:20年前,我们正在编写C代码,并讨论Clipper或Turbo Pascal的优点。面向对象是学术界的专有领域。提出几乎没有改变的提议是完全荒谬的。
–Daniel C. Sobral
09年7月7日在19:53
@Daniel:请提供这些为Clipper的“优点”辩护的人的名单。他们需要被追捕并绳之以法。
–大卫
09年9月17日在17:59
#3 楼
对我来说,主要优点是其固有的并行性,尤其是当我们现在从越来越多的MHz转向越来越多的内核时。我认为它不会成为下一个编程范例并完全取代OO类型的方法,但我确实认为我们需要使用功能性语言编写一些代码,或者我们的通用语言将增长以包含更多的功能构造。
评论
我们已经看到了这种情况。而且将来还会发生更多。所以我同意这一点。
–杰森·贝克(Jason Baker)
09年1月4日在17:32
棘手的是,正是FP的无共享/无副作用方面使得FP非常适合并行处理。这些都是面向对象解决方案不适合的方面-要使有效的混合动力非常困难。也许FP粘在OO节点之间?
–詹姆斯·布雷迪
09年1月5日,12:24
对于有效的混合动力,请查看D编程语言的2.0分支。这是Alpha /正在进行中的工作,但是已经实现了。
–dsimcha
09年1月6日19:56
我发现这个答案很有趣,我不知道任何功能性语言,为什么它们被认为更适合并行性?
– andandandand
09年1月27日在3:03
由于没有共享数据,因此函数没有副作用。您只关心返回值。 (对于OO /过程程序员来说,这是一个很难的主意。)因此,只要不将一个函数的输出用作另一个函数的输入,就可以一次调用许多函数。
–汤姆·史密斯
09年1月28日在0:24
#4 楼
即使您从未专业使用过函数式语言,理解函数式编程也会使您成为更好的开发人员。一般而言,它将为您提供有关代码和编程的新视角。我说没有理由不学习它。
我认为将功能和命令式风格完美融合的语言最有趣,而且最有可能成功。
评论
好点,但是我想看到一个解释“它将以什么方式使您成为更好的开发人员”
–mt3
09年3月12日在5:06
不同的编程范例从不同的角度处理问题,通常需要“不同的思维方式”或思维方式。用多种不同的思维方式训练自己(暗示学习在哪种情况下使用哪种方式...)从来不是一件坏事。
–peSHIr
09年4月3日在5:52
#5 楼
我一直对下一件大事持怀疑态度。很多时候,“下一件大事”纯粹是历史的偶然,无论技术是否好,都在正确的时间,正确的时间出现在正确的地方。示例:C ++,Tcl / Tk,Perl。所有有缺陷的技术都取得了巨大的成功,因为它们被认为可以解决当今的问题或与根深蒂固的标准几乎完全相同,或两者兼而有之。函数编程确实确实很棒,但这并不意味着它将被采用。但是我可以告诉你,为什么人们对函数式编程感到兴奋:很多程序员都有一种“转换”经验”,他们发现使用功能语言可以使他们的生产效率提高两倍(或者可能是生产效率的十倍),同时产生的代码对更改的适应性更强,并且错误更少。这些人将函数式编程视为秘密武器。保罗·格雷厄姆(Paul Graham)的《击败平均水平》就是一个很好的例子。哦,他的申请?电子商务Web应用程序。
自2006年初以来,关于函数式编程和并行性的讨论也越来越多。自从至少从1984年以来,像Simon Peyton Jones这样的人就一直担心并行性,所以直到功能语言解决多核问题之前,我都不会屏息。但这确实可以解释当前的一些其他嗡嗡声。
总体而言,美国大学在执行功能编程方面做得不好。对于使用Scheme进行入门编程的教学,有强大的支持核心,而Haskell也在那里获得了一些支持,但是对于函数式程序员而言,教授高级技术的方式很少。我曾在哈佛大学教授过这样的课程,今年春天将在塔夫茨大学再次授课。本杰明·皮尔斯(Benjamin Pierce)在宾夕法尼亚州(Penn)教授过这样的课程。我不知道保罗·哈达克(Paul Hudak)在耶鲁大学做过什么事情。欧洲的大学做得更好。例如,在丹麦,荷兰,瑞典和英国的重要地方都强调了函数式编程。我对大洋洲发生的事情不太了解。
评论
我不了解英国的大学。您很有可能会发现这里的许多大学都只教授很少的编程语言(Java,C,如果幸运的话,也许是Perl)。这里的问题是质量上的差异,因为最好的(很少)大学拥有最好的CS课程。
– Mike B
09年1月5日上午10:50
我不同意您提供的示例有缺陷,适当或可能适合某些领域,但其通用目的足以在没有庞大学习曲线的情况下被普遍采用。这可能是他们如此成功的最大原因。
– gbjbaanb
09年1月5日在10:51
我在英国的uni大学(以及Pascal,C,Modula2和Cobol)做过Forth和Lisp,但这是20年前。
– kpollock
09年1月5日于13:09
我曾在uni(在澳大利亚)教过Java / C ++,但是我的一些同事去了不同的大学,在那里他们在Haskell开设了多个部门。它既用于编程入门,又用于最后一年的学习。当我听到我的同事对Java讲师的第一次介绍后,我笑了(当时他只认识Haskell)-“什么?!你的意思是你有东西,但是你没有。” t知道是什么类型吗?!”
–雅各布·斯坦利(Jacob Stanley)
09年8月27日在13:56
与团队中的所有欧洲人一起看看C#发生了什么:)
– Benjol
2010-3-15在13:55
#6 楼
我在这里的房间里看不到有人提到大象,所以我认为这取决于我:)JavaScript是一种功能语言。随着越来越多的人使用JS做更多高级的事情,尤其是利用jQuery,Dojo和其他框架的优点,FP将由Web开发人员的后门引入。
结合闭包,FP使JS代码非常轻巧,但仍然可读。
干杯,
PS
评论
这就是我真正开始研究函数式编程的方式。没有什么比Prototype.js的list.Each(function(item){})或jQuery的整个操作方法更好。
– Cory R. King
09年3月29日在15:51
Javascript允许人们以一种实用的方式进行编程。但是,它是一种交叉范式语言,它允许人们以各种不同的方式进行编程(我更喜欢,但这不相关)... OO,功能,过程等。
–RHSeeger
2009年5月27日15:40
+1,请参见codex.sigpipe.cz/zeta
–只是一个人
09年12月20日在15:21
jQuery对象方法只是list monad中的操作。将代表容器(或序列)的对象作为输入并返回对象容器作为输出,这是对fmap进行实际改造的一个很好的例子。
–杰瑞德·厄普迪克(Jared Updike)
2011年10月8日,下午5:51
#7 楼
大多数应用程序都足够简单,可以使用普通的OO方法解决。
因此,为什么1950年代的这种语言没有过时的简短解释是
它不是技术但是数学和
数学不会过时。比较Lisp的正确方法不是1950年代的硬件,而是Quicksort算法,它是在1960年发现的,仍然是最快的算法。
通用排序。
#8 楼
我敢打赌,您在使用时不知道自己是函数式编程:Excel公式
Quartz Composer
JavaScript
徽标(Turtle图形)
LINQ
SQL
Underscore.js(或Lodash),
D3
评论
Javascript如何被视为函数式编程?
–起搏器
14年6月13日在10:14
它具有一流的功能,高阶功能,闭包,匿名功能,部分应用程序,柯里化和合成。
– daniel1426
14-10-16在15:48
哈哈。一旦编写了一个负载还款Excel公式,该公式比具有嵌套函数的屏幕还要宽。我有点知道那时我在进行功能编程,但还不知道这个术语。
– ProfK
2014年11月3日,12:34
请在该列表中添加C
–曼迪普(Mandeep Janjua)
15年1月8日在19:34
@MandeepJanjua:嗯?怎么来的?还是为什么不使用任何语言呢?
– Sz。
18年1月23日在22:31
#9 楼
一般的公司程序员,例如
与我一起工作的大多数人,
不理解它,并且大多数工作
环境不允许您在其中编程
那只是时间问题。您的普通公司程序员会学到当前的大事。 15年前,他们还不了解OOP。
如果FP流行起来,您的“普通企业程序员”将紧随其后。
在大学中并不是真正的教授。 >(还是现在?)
变化很大。在我的大学里,SML是向学生介绍的第一门语言。
我相信MIT将LISP作为一年级课程教授。当然,这两个示例可能并不具有代表性,但是我相信大多数大学至少都提供一些关于FP的可选课程,即使他们没有将FP设置为必修课程。
大多数应用程序都很简单,就可以用普通的OO方法解决。
这并不是“足够简单”的事情。 FP中的解决方案会更简单(或更可读,更健壮,更优雅,更高效)吗?许多事情“足够简单,可以用Java解决”,但仍然需要大量的代码。
无论如何,请记住FP支持者声称这是下一件大事几十年了。也许他们是对的,但请记住,并不是在5、10或15年前提出相同的主张时。
肯定对他们有利的一件事是最近,C#向FP迈出了重大步伐,以至于它实际上使一代程序员变成了FP程序员,甚至没有引起他们注意。这可能只是为FP“革命”铺平了道路。也许。 ;)
评论
麻省理工学院在CS入门课程中曾经教过Scheme,但是现在使用Python。
– mipadi
09年1月4日19:00
“ 15年前,他们不了解OOP”-问题是15年前,他们也不了解FP。他们今天仍然没有。
–杰森·贝克(Jason Baker)
09年1月4日在19:03
#10 楼
人如果看不到其他艺术的价值,就无法理解自己选择的艺术的完美和不完善。遵循规则只能使技术发展到一定程度,然后学生和艺术家必须学习更多并寻求进一步的发展。研究其他艺术以及策略艺术是有意义的。谁没有通过观看他人的活动而对自己有所了解?要学习剑学习吉他。学习拳头学习商业。只学习剑会使你头脑狭窄,不会让你向外成长。
-宫本武藏,《五环之书》
#11 楼
功能语言的一个主要功能是一流功能的概念。想法是可以将函数作为参数传递给其他函数,然后将它们作为值返回。函数式编程涉及编写不会更改状态的代码。这样做的主要原因是,对函数的连续调用将产生相同的结果。您可以使用任何支持一流功能的语言编写功能代码,但是有些语言(例如Haskell)不允许您更改状态。实际上,您根本不应该产生任何副作用(例如打印文本),这听起来似乎完全没有用。
Haskell则对IO采用了另一种方法:monad。这些对象包含要由解释程序的顶层执行的所需IO操作。在任何其他级别上,它们只是系统中的对象。
函数式编程提供了哪些优势?由于每个组件都是完全隔离的,因此函数式编程可以减少潜在的错误编码。另外,使用递归和一流的功能还可以提供正确性的简单证明,这些证明通常反映了代码的结构。
#12 楼
我认为大多数现实主义者都不认为函数式编程会流行(成为像OO这样的主要范例)。毕竟,大多数业务问题不是数学问题,而是用于移动数据并以各种方式显示数据的命令式规则,这意味着它不太适合纯函数式编程范例(monad的学习曲线远远超过OO。)OTOH,使编程变得有趣的是函数式编程。它使您欣赏宇宙基本数学的简洁表达所固有的永恒的美丽。人们说学习函数式编程将使您成为更好的程序员。这当然是高度主观的。我个人也不认为这是完全正确的。
它使您有更好的知觉。
评论
我不认为OO本质上比FP容易。这确实取决于您的背景(我是一个数学专家,您猜我觉得容易多了吗?
–temp2290
2009年3月11日15:38
Monad并不难理解。不要买那废话。
–雷恩
2009年6月6日14:47
-1 OOP比FP难
–只是一个人
2009年12月20日15:25
-1如果FP仅适合于漂亮的数学问题,我们不会使用OCaml或Haskell编写优化编译器。
–racchus
14年7月14日在20:55
#13 楼
我一定很稠密,但我还是不明白。是否有用F#之类的功能语言编写的小型应用程序的实际示例,您可以在其中查看源代码,并了解使用这种方法比使用C#更好和如何使用这种方法的原因?评论
好评+1。 @Mendelt:“更方便”?您是说看代码时头疼更快吗?
–Patrick Honorez
09年9月23日在19:47
请参阅以下F#库:quanttec.com/fparsec/tutorial.html。我很想看看带有解析器的C#中的示例代码,即使它们被编译为相同的指令,它们的外观和可读性也仅为F#代码的一半。并尝试将FParsec从F#移植到C#,看看代码是如何膨胀的。
–杰瑞德·厄普迪克(Jared Updike)
2011年10月8日,下午5:54
#14 楼
我要指出的是,关于功能语言的所有内容,大约20年前,大多数人都在谈论面向对象的语言。那时,听说OO是很常见的事情。无论接受过早期技术培训的人员是否认为不必要进行更改,有意义且重要的更改都将实现。尽管当时所有人都反对OO,您认为对OO的更改是否很好?评论
*一般的公司程序员,例如与我一起工作的大多数人都不会理解它,并且大多数工作环境都不允许您在其中编程-在我工作过的许多地方,OOP仍然是这样:)(当然,他们说他们在做OOP,但是他们不是)
– tolanj
13年11月26日23:52
#15 楼
F#可能会流行,因为Microsoft正在推动它。Pro:
F#将成为Visual Studio下一版本的一部分。建立社区已有一段时间了-与知名客户合作的传教士,书籍,顾问,在MS会议上的大量曝光。
F#是一流的.Net语言,并且是第一种具有非常强大的基础功能语言(不是我说Lisp,Haskell,Erlang,Scala和OCaml没有很多库,它们不如.Net完整。
对并行性的强大支持
相反:
即使您精通C#和.Net,也很难启动F#-至少对我来说:(
很难找到好的F#开发人员
因此,我给F#50:50使其变得重要的机会,其他功能语言也不会在不久的将来实现。
评论
我认为Scala是JRE的相当深厚的基础。
– cdmckay
09年7月24日在4:36
关于库,这实际上取决于您在做什么。 F#面向金融领域,也适用于科学计算,但OCaml实际上具有比.NET更好的此类应用程序库。例如,当我从OCaml进入F#时,我找不到合适的FFT,最终用C#然后是F#编写(并出售)自己的FFT。
– J D
09年8月10日在0:41
LINQ是在C#和VB.Net中使用功能概念的良好桥梁。而且我发现与F#相比,它的阅读痛苦要小得多。
–马修·怀特(Matthew Whited)
09年11月6日14:48
#16 楼
我认为原因之一是有些人认为一种语言是否被接受的最重要部分是该语言的质量。不幸的是,事情很少如此简单。例如,我认为Python被接受的最大因素不是语言本身(尽管这很重要)。 Python如此受欢迎的最大原因是其庞大的标准库和更大的第三方库社区。Clojure或F#之类的语言可能是例外,因为它们是基于JVM / CLR构建。结果,我没有答案。
评论
+1,但不要忘记营销的力量,而且您公司的大量旧代码不会因为一些很酷的新趋势而切换语言。
–temp2290
2009年3月11日15:45
您忘了提及:Google正在普及python。
–郝宇林
09年3月31日在16:31
#17 楼
大多数应用程序都可以用[在这里插入您喜欢的语言,范例等]解决。这是事实,可以使用不同的工具来解决不同的问题。功能性仅允许另一个更高(更高?)级别的抽象,如果使用得当,它可以更有效地完成我们的工作。
#18 楼
在我看来,那些从未学习过Lisp或Scheme的人现在正在发现它。与该领域的许多事物一样,有一种大肆宣传并创造高期望的趋势...它会过去。
函数式编程很棒。但是,它不会接管世界。 C,C ++,Java,C#等仍然存在。
我认为这将带来更多的跨语言功能-例如,以功能语言实现事物,然后提供对它的访问权限其他语言的东西。
评论
C#现在是一种功能编程语言(与Lisp一样多),因为它具有一流的词法闭包。实际上,它们已经在WPF和TPL中使用。因此,函数式编程显然已经在这里。
– J D
09年8月10日在0:44
#19 楼
在阅读Epic Games的Tim Sweeney的“下一代主流编程语言:游戏开发者的观点”时,我的第一个想法是-我必须学习Haskell。PPT
Google的HTML版本
#20 楼
事情已经朝着功能性方向发展了一段时间。过去几年中,两个很酷的新手Ruby和Python都比以前的语言更接近于函数语言-如此之多,以至于有些Lispers已经开始“足够接近”地支持一种或另一种。大规模并行硬件给每个人带来发展压力,而功能语言正处在应对变化的最佳位置,这与以前认为Haskell或F#将成为下一件大事。
#21 楼
您最近是否一直在关注编程语言的发展?所有主流编程语言的每个新发行版似乎都从函数式编程中借用了越来越多的功能。闭包,匿名函数,传递和返回函数作为值,这些值曾经是仅被已知的奇特功能Lisp和ML黑客。但是逐渐地,C#,Delphi,Python,Perl,Javascript添加了对闭包的支持。
多种语言,特别是Python,C#和Ruby对列表推导和列表生成器具有本机支持。
ML是通用编程的先锋在1973年,但是对泛型的支持(“参数多态性”)仅在最近5年左右才成为行业标准。如果我没记错的话,Fortran在2003年支持泛型,其次是Java 2004,C#在2005年,Delphi在2008年。(我知道C ++自1979年以来就支持模板,但是关于C ++ STL的讨论中有90%的讨论都始于“这里有魔鬼”。 。)
是什么让这些功能吸引程序员?这应该是显而易见的:它可以帮助程序员编写较短的代码。如果将来所有语言都想保持竞争力,它们将至少支持关闭。在这方面,函数式编程已经成为主流。
大多数应用程序都足够简单,可以以普通的OO方法解决
谁说过不能将函数式编程用于简单的事情?并非每个功能程序都需要成为编译器,定理证明者或大规模并行电信交换机。除了更复杂的项目之外,我还经常将F#用于临时的临时脚本。
#22 楼
它之所以流行,是因为它是控制复杂性的最佳工具。参见:
-Simon Peyton-Jones的幻灯片109-116讲“ Haskell的味道”
-Tim Sweeney的“下一代主流编程语言:游戏开发者的观点”
>
评论
要添加的链接:research.microsoft.com/en-us/um/people/simonpj/papers/…st.cs.uni-sb.de/edu/seminare/2005/advanced-fp/docs/sweeny.pdf
–斯坦斯坦
09年1月12日在21:19
#23 楼
查看为什么函数式编程如此重要评论
链接没有打开。错误403。
–阿列克西·弗伦兹(Alexey Frunze)
2012年9月7日于7:28
这可能是一个很好的替代品? cs.kent.ac.uk/people/staff/dat/miranda/whyfp90.pdf
– canadiancreed
13年8月9日在16:50
无效链接。这就是为什么这类答案不适合引用和链接的原因。
–西尔维斯特
2014年2月8日在17:20
我已经修复了链接。 @Sylwester是正确的,但是它是一个23页的文档。在该站点上将论文精炼下来以作答是没有道理的。
–grom
2014年2月10日下午5:37
#24 楼
我同意第一点,但时代在变。即使公司发现采用新技术,即使他们后来采用,也将做出回应。生活是动态的。90年代后期,他们在斯坦福大学教授Haskell和ML。我确信像卡内基·梅隆大学,麻省理工学院,斯坦福大学和其他好的学校这样的地方都在向学生展示它。
我同意大多数“在网络上公开关系数据库”应用程序将继续保持这种发展趋势。需很长时间。 Java EE,.NET,RoR和PHP已经为该问题提供了一些非常好的解决方案。
您遇到了一些重要的问题:这可能是其他人无法轻松解决的问题意味着将增强功能编程。那会是什么?
大规模的多核硬件和云计算会推动它们前进吗?
#25 楼
因为FP在生产率,可靠性和可维护性方面具有显着优势。多核可能是一个杀手级应用,尽管有大量的遗留代码,但最终还是使大公司进行了转换。此外,由于许多核的关注,甚至C#之类的大型商业语言也呈现出独特的功能风格-副作用我不能同意并发和并行性。我不同意“普通”程序员不会理解它。他们将像最终了解OOP一样(这是一样神秘和奇怪,甚至更多)。
此外,大多数大学都在教授FP,许多大学甚至将其作为第一门编程课程。
评论
抱歉,但是FP的长度大约是OOP的3倍。这根本不是需要更多时间的问题。要使FP成为主流,还需要做更多的工作。
–杰森·贝克(Jason Baker)
09年1月5日,12:43
您怎么会错过我的帖子中我解释的“更多内容”很可能是多核的部分?而“周围”的东西并不真正相关。人们了解OOP,因为当时OOP提供了切实的好处,FP才刚刚成为现实。
–塞巴斯蒂安
09年2月12日在22:46
#26 楼
哇-这是一个有趣的讨论。我对此的看法:FP使某些任务相对简单(相比于无FP语言)。
无FP语言已经开始接受FP的创意,因此我怀疑这种趋势将持续下去,我们将看到更多的合并,这将有助于人们更轻松地实现向FP的跨越。
#27 楼
我不知道它是否会流行,但是从我的调查来看,功能语言几乎肯定值得学习,它将使您成为更好的程序员。仅仅了解参照透明性,就可以使许多设计决策变得容易得多,并且由此产生的程序也更容易推论。基本上,如果遇到问题,那么它往往只是单个函数的输出问题,而不是状态不一致的问题,这可能是由数百种类/方法/函数中的任何一种引起的FP的无状态本质更自然地映射到Web的无状态本质,因此功能性语言更容易将其自身应用到更优雅的RESTFUL Web应用程序中。与JAVA和.NET框架形成对比,后者需要借助诸如VIEWSTATE和SESSION密钥之类的丑陋的HACK来维护应用程序状态,并在基本无状态的功能平台(如Web)上维护有状态命令性语言的(有时是非常泄漏的)抽象。
而且,您的应用程序越无状态,它越容易进行并行处理。如果您的网站正变得流行,则对网络极为重要。仅向站点添加更多硬件以获得更好的性能并不总是那么容易。
#28 楼
我的观点是,由于微软将它进一步推向了主流,它将会流行起来。对我来说,它之所以具有吸引力是因为它可以为我们做些什么,因为这是一个新的挑战,并且因为它对未来充满了希望。一旦掌握了它将成为进一步帮助我们的另一种工具。作为程序员,生产率更高。
#29 楼
讨论中遗漏的一点是,在现代FP语言中找到了最好的类型系统。更重要的是,编译器可以自动推断所有(或至少大多数)类型。有趣的是,在进行Java编程时,人们花了一半的时间来编写类型名称,但Java到目前为止并不是类型安全的。尽管您可能永远不会在Haskell程序中编写类型(除了作为编译器检查过的一种文档),并且代码是100%类型安全的。
#30 楼
除了其他答案之外,以纯功能术语转换解决方案还可以使人们更好地理解问题。相反,以功能风格进行思考会发展出更好的*解决问题的能力。*要么是因为功能范式更好,要么是因为它提供了额外的攻击角度。
评论
约翰·休斯(John Hughes)就此撰写了一篇论文:为什么函数式编程如此重要。关于如何从结构到程序再转换到功能编程的代码说明medium.com/@elye.project/…