为什么进行函数式编程


38

函数式编程有什么用?我看到了很多关于它的话题,但是老实说我从来没有发现它们有用。为什么这么多大学显然教他们呢?


6
在AI编程方面非常重要。
Aqua

3
@aqua-为什么不应该这样回答呢?
马丁·贝克特

5
我还要指出,甚至传统的OO语言也开始包含函数式编程的概念。Linq(在.NET中)就是一个很好的例子。
apoorv020 2011年

我认为函数式编程可以使您的大脑更多地运转,并且可以导致真正精巧的代码。所以这很酷。
阿德尔(Adel)

2
@ apoorv020:泛型,元组和垃圾回收等等都起源于功能语言。
乔恩·哈罗普

Answers:


60

为什么函数编程如此重要开始。然后转到为什么功能编程如此重要。一些子弹:

  • 函数式编程可让您以不同的方式对问题进行推理
  • 功能抽象非常强大,可以让您以其他范式无法使用的方式干燥代码
  • 在我们的多核未来中,功能语言可能更容易拆分为同时执行的任务(尽管功能不严格的语言也正在努力解决该问题)。
  • 更容易证明用纯函数语言编写的程序(无副作用)在数学上是正确的。

5
+1-这些都是很棒的观点,比我尝试做的更简洁,更精确。
jmort253 2011年

1
随着你的第四点,你的意思的语言可以被证明是正确的,或者程序编写语言?无论如何,不​​纯净的语言和用不纯净的语言编写的程序都可以被证明是正确的,这更加困难和混乱。
约尔格W¯¯米塔格

1
@JörgW Mittag,也可以更轻松地推断语言本身的属性。指称语义对于功能性语言而言是微不足道的,而对于命令性语言而言则相当复杂。
SK-logic

有趣的是,第二个链接如何提供一些“显式”参数,因为我什至没有读过第一个链接。
jokoon

+1:好答案。我特别喜欢您如何将#1和#2的要点放在单词上。
Jim G.

9

函数式编程概念奠定了基础,将改变您的思维方式并帮助您解决现实世界中的问题。

这个概念类似于为什么我们都以计算机科学专业学习多变量微积分,代数和/或工程物理学,即使我们在职业生涯中可能永远不需要该特定知识。

这就是为什么法学院喜欢拥有数学学士学位的候选人的原因。学习数学可以教您以逻辑方式思考多个概念,而函数式编程则可以教您抽象和许多其他重要概念,这些概念可以帮助您分解问题并以不同的眼光看待它们。

总之,函数式编程可以帮助您学习如何学习。


也许它真的不需要名称了吗?这不是简单的“正确”程序设计吗?

4

当您开始时,函数式编程是最佳的思维模型。因为您的大多数程序都不需要面向对象。至少那是我的经验。

但是,现在我进入了一些需要将显示和逻辑分离的应用程序中,那时我开始分离所有逻辑和显示代码,以使每个操作都更容易做到最好。

但是除非您先掌握“功能”,否则您将不知道为什么要这样做。我从来不喜欢有人向我推销OO,或者OO是所有问题的解决方案。只要确保您使用的任何方法对您的工作有意义,并且学习曲线不会太陡峭,以致您不会花太多时间从获得报酬的工作上花费时间。


1
+1-我喜欢您指出的使用最佳技术的工作:请确保它有意义。
jmort253 2011年

1
不幸的是,常识在我们行业中很少见。因为我们每个人都有完全不同的经历,由于我们犯的错误而有所不同,所以我们每个人都会养成不同的习惯,以及为什么要这么做...就像调整源代码控制一样,对于那些一直努力工作的人来说毫无意义他们自己。
crosenblum 2011年

“常识是世界上分布最广泛的事物,因为每个人都认为他有足够的天赋,即使是那些在所有其他问题上最难于满足的人也没有习惯去追求比以前更多的习惯。有。” -笛卡尔

3

因为它强调动词,而不是名词。有时重要的是动词。


OOP强调名词。有时候,重要的是名词。我们怎么知道哪个?– 错误的困境。死机

3

因为通常它使用较少的代码来完成相同的任务。编写更少的代码,维护更少的代码。除了减少代码之外,它还倾向于具有更少的状态,因此推理起来稍微简单一些(一旦您习惯了)。


因此,这不仅仅是“更好”的定义吗?我们为什么要做您所描述之外的任何事情?

2

也许是因为大学希望从所有编程范例中教授一些东西,并且在某些方面,功能编程更好(例如描述游戏角色的动作和描述动画)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.