您认为函数式编程的好处是什么?它们今天如何适用于程序员?
函数式编程和OOP之间最大的区别是什么?
答案 0 :(得分:72)
函数式编程的风格是描述你想要的东西,而不是如何获得它。即:而不是创建一个带有迭代器变量的for循环,并通过一个数组行进到每个单元格,你会说相当于“这个标签指的是这个函数已经在所有的元素“。
函数式编程将更多基本的编程思想转移到编译器中,如列表推导和缓存等思想。
功能编程的最大好处是简洁,因为代码可以更简洁。函数程序不会创建迭代器变量作为循环的中心,因此从代码中消除了这种和其他类型的开销。
另一个主要好处是并发性,这对于函数式编程更容易,因为编译器正在处理过去需要手动设置状态变量的大多数操作(比如循环中的迭代器)。
根据程序的编写方式,在单处理器的上下文中也可以看到一些性能优势,因为大多数函数式语言和扩展都支持惰性求值。在Haskell中,您可以说“此标签表示包含所有偶数的数组”。这样的数组是无限大的,但你可以随时要求该数组的第100,000个元素而不必知道 - 在数组初始化时 - 你需要的最大值是什么。该值仅在您需要时计算,不再计算。
答案 1 :(得分:26)
最大的好处是它不是你习惯的。选择一种像Scheme这样的语言,学会解决它的问题,你将成为一个更熟悉的语言程序员。这就像学习第二种人类语言。你假设其他人基本上是你自己的变种,因为你没有什么比较它。接触他人,特别是那些与你已经知道的无关的人,是有益的。
答案 2 :(得分:11)
答案 3 :(得分:9)
因此,一个好的起点是尝试理解一些在命令式语言中不可能但在函数式语言中可能的事情。
如果你在谈论可计算性,那么在功能性而非命令式编程中当然没有任何可能性(反之亦然)。
不同编程范式的关键不在于让事情变得可能以前是不可能的,而是为了让事情变得容易,之前很难。
功能编程旨在让您更轻松地编写简洁,无错误且可并行化的程序。
答案 4 :(得分:5)
它不必是一个或另一个:使用像C#3.0这样的语言可以混合每个元素的最佳元素。 OO可用于类级及以上的大规模结构,方法级小尺度结构的功能风格。
使用Functional样式允许编写代码,清楚地声明其意图,而不会与控制流语句等混淆。由于副作用免费编程等原则,更容易推理代码,并且检查其正确性。
答案 5 :(得分:5)
我认为函数式编程需要最实用的例子是并发性 - 函数式程序自然是线程安全的,并且鉴于多核硬件的兴起,这是非常重要的。
函数式编程也增加了模块性 - 你经常可以看到命令中的方法/函数太长 - 你几乎看不到函数超过几行。而且由于所有东西都是分离的 - 可重用性大大提高,单元测试非常简单。
答案 6 :(得分:2)
一旦程序增长,我们词汇表中的命令数量就会变得太高,使得它很难使用。这是面向对象编程使我们的生活更轻松的地方,因为它允许我们以更好的方式组织我们的命令。 我们可以将涉及客户的所有命令与某个客户实体(一个类)相关联,这使得描述更加清晰。但是,程序仍然是一系列命令,指定它应该如何继续。
功能编程提供了一种完全不同的扩展词汇表的方法。不限于添加新的原始命令;我们还可以添加新的控制结构 - 基元,指定我们如何将命令放在一起来创建程序。在命令式语言中,我们能够按顺序组合命令或使用有限数量的内置结构(如循环),但如果查看典型程序,您仍会看到许多重复结构;组合命令的常用方法
答案 7 :(得分:1)
不要以“需要”来考虑函数式编程。相反,把它想象成另一种编程技术会开放你的思想,就像OOP,模板,汇编语言等可能在你学习它们时(如果)完全改变了你的思维方式。最终,学习函数式编程将使您成为更好的程序员。
答案 8 :(得分:0)
如果您还不知道函数式编程,那么学习它会为您提供更多解决问题的方法。
FP是一种简单的泛化,它将函数提升为第一类值,而OOP则用于大规模的代码结构化。然而,有一些重叠,其中OOP设计模式可以使用一流函数直接表示,更简洁。
许多语言都提供FP和OOP,包括OCaml,C#3.0和F#。
干杯, Jon Harrop。