Functional programming 函数式编程的好处是什么?

Functional programming 函数式编程的好处是什么?,functional-programming,Functional Programming,你认为函数式编程的好处是什么?它们如何适用于今天的程序员 函数式编程和面向对象编程之间最大的区别是什么 它不一定非得是一种或另一种:使用C#3.0这样的语言可以让你将其中最好的元素混合在一起。面向对象可用于类级及以上的大规模结构,函数式可用于方法级的小规模结构 使用函数式风格可以编写明确声明其意图的代码,而不会与控制流语句等混淆。由于无副作用编程等原则,因此更容易对代码进行推理,并检查其正确性。函数式编程的风格是描述您想要的内容,而不是如何得到它。ie:与使用迭代器变量创建for循环并遍历数组对

你认为函数式编程的好处是什么?它们如何适用于今天的程序员


函数式编程和面向对象编程之间最大的区别是什么

它不一定非得是一种或另一种:使用C#3.0这样的语言可以让你将其中最好的元素混合在一起。面向对象可用于类级及以上的大规模结构,函数式可用于方法级的小规模结构


使用函数式风格可以编写明确声明其意图的代码,而不会与控制流语句等混淆。由于无副作用编程等原则,因此更容易对代码进行推理,并检查其正确性。

函数式编程的风格是描述您想要的内容,而不是如何得到它。ie:与使用迭代器变量创建for循环并遍历数组对每个单元格执行某些操作不同,您可以说“此标签指的是此数组的一个版本,其中此函数已对所有元素执行。”

函数式编程将更基本的编程思想转移到编译器中,例如列表理解和缓存

函数式编程的最大好处是简洁,因为代码可以更简洁。函数式程序不会创建一个迭代器变量作为循环的中心,因此这类开销和其他类型的开销可以从代码中消除

另一个主要好处是并发性,这在函数式编程中更容易实现,因为编译器负责大多数需要手动设置状态变量(如循环中的迭代器)的操作


在单处理器环境中也可以看到一些性能优势,这取决于程序的编写方式,因为大多数函数式语言和扩展都支持延迟计算。在Haskell中,您可以说“此标签表示包含所有偶数的数组”。这样的数组是无限大的,但是您可以随时请求该数组的第100000个元素,而不必在数组初始化时知道所需的最大值。只有在您需要时才会计算该值,而且不会进一步计算。

最大的好处是它不是您所习惯的。选择一种类似Scheme的语言,并学会用它来解决问题,你就会成为一个使用你已经知道的语言的更好的程序员。这就像学习第二种人类语言。你假设其他人基本上是你自己的一个变体,因为你没有什么可以与之相比。与他人接触,特别是与你已经知道的知识无关的知识,是很有启发性的。

如果你还不知道函数式编程,那么学习它可以为你提供更多解决问题的方法

FP是一个简单的泛化,它将函数提升为一级值,而OOP则用于大规模的代码结构。然而,在OOP设计模式可以使用一级函数直接、更简洁地表示的地方存在一些重叠

许多语言同时提供FP和OOP,包括OCaml、C#3.0和F#

干杯,
Jon Harrop.

我认为函数式编程最实际的例子是并发性——函数式程序自然是线程安全的,考虑到多核硬件的兴起,这是最重要的


函数式编程也增加了模块性——你经常可以看到命令式中的方法/函数太长了——你几乎看不到一个函数超过几行。由于一切都是解耦的,可重用性大大提高,单元测试非常容易

为什么函数式编程很重要

摘要

随着软件变得越来越复杂,它变得越来越复杂 更重要的是要组织好它。结构良好的软件很容易 编写和调试,并提供可以 可重复使用,以降低未来的编程成本

在本文中,我们展示了 函数式语言的两个特性,特别是高阶 函数和惰性评估,可以对 模块化。作为例子,我们操纵列表和树,编写程序 几种数值算法,并实现alpha-beta启发式 (一种用于游戏的人工智能算法) 程序)。我们得出结论,因为模块化是成功的关键 编程,函数式编程为 软件开发

因此,一个很好的起点是尝试理解一些在命令式语言中不可能,但在函数式语言中可能的事情

如果您谈论的是可计算性,那么在函数式编程中当然没有什么是可能的,但命令式编程(反之亦然)

不同编程模式的目的不是让以前不可能的事情成为可能,而是让以前困难的事情变得容易


函数式编程的目的是让你更容易编写简洁、无bug、可并行的程序。

不要把函数式编程看成是一种“需要”。相反,可以将其视为另一种编程技术,它将打开您的思路,就像OOP、模板、汇编语言等可能在您学习它们时完全改变了您的思维方式一样。最终,学习函数式编程将使您成为一名更好的程序员。

一旦程序增长,我们的词汇表中的命令数量将变得太多,使用起来非常困难。这就是面向对象编程使我们的生活更轻松的地方,因为它允许我们以更好的方式组织命令。 我们可以将涉及customer的所有命令与某个customer实体(一个类)关联起来,这使得描述更加清晰