函数式编程的好处是什么?
我们认为函数式编程的好处是什么?以及它们如何适用于当今的程序员?
函数式编程和OOP之间的最大区别是什么?
解决方案
不必一定要是另一种:使用C#3.0之类的语言,我们可以混合每个元素的最佳元素。 OO可用于类级别及更高级别的大型结构,功能样式可用于方法级别的小型结构。
使用Functional样式可以编写清楚声明其意图的代码,而不会与控制流语句等混淆。由于诸如副作用自由编程之类的原理,推理代码和检查其正确性要容易得多。 。
函数式编程的风格是描述我们想要的东西,而不是如何获得它。即:不是说用迭代器变量创建for循环并遍历数组对每个单元格做一些事情,而是说"等效于此标签指的是该数组的版本,其中所有元素。"
函数式编程将更多的基本编程思想(例如列表推导和缓存)移入了编译器。
函数式编程的最大好处是简洁,因为代码可以更简洁。函数式程序不会将迭代器变量创建为循环的中心,因此可以从代码中消除此类开销和其他开销。
另一个主要好处是并发性,并发性更易于使用函数式编程,因为编译器会处理大多数以前需要手动设置状态变量的操作(例如循环中的迭代器)。
在某些情况下,也可以在单处理器的环境中看到一些性能优势,这取决于程序的编写方式,因为大多数功能语言和扩展都支持延迟评估。在Haskell中,我们可以说"此标签代表包含所有偶数的数组"。这样的数组是无限大的,但是我们可以随时请求该数组的第100,000个元素,而不必在数组初始化时知道我们将需要的最大值。仅在需要时才计算该值,而不会进行进一步的计算。
最大的好处是,这不是我们所习惯的。选择像Scheme这样的语言并学习解决其问题,我们将成为使用已经知道的语言的更好的程序员。就像学习第二种人类语言一样。我们假设其他人基本上是我们自己的变体,因为我们没有可与之比较的东西。暴露于他人(特别是与我们所知道的事物无关的事物)具有启发性。
如果我们还不了解函数式编程,那么学习它可以为我们提供更多解决问题的方法。
FP是一种简单的概括,可以将函数提升为一等值,而OOP用于大规模的代码结构化。但是,存在一些重叠,在这些重叠中,可以使用一流的功能直接且更简洁地表示OOP设计模式。
许多语言同时提供FP和OOP,包括OCaml,C3.0和F#。
干杯,
乔恩·哈罗普(Jon Harrop)。
我认为功能编程需求的最实际例子是并发功能程序自然是线程安全的,并且鉴于多核硬件的兴起,这一点至关重要。
函数式编程还提高了模块化性,我们经常可以看到强制性的方法/函数,因为它们太长了,我们几乎永远看不到函数多于几行。而且,由于一切都是解耦的,因此可重用性得到了极大的改善,并且单元测试非常非常容易。
为什么函数式编程很重要
http://www.cs.kent.ac.uk/people/staff/dat/miranda/whyfp90.pdf
A good starting point therefore would be to try to understand some things that are not possible in imperative languages but possible in functional languages.
如果我们在谈论可计算性,那么在函数式编程中绝对没有可能,但在命令式编程中则不可能(反之亦然)。
不同编程范例的目的不是要使以前不可能的事情成为可能,而是要使以前很难的事情变得容易。
函数式编程旨在让我们更轻松地编写简洁,无错误且可并行化的程序。
不要以"需求"来考虑函数式编程。相反,可以将其视为另一种编程技术,它会像OOP,模板,汇编语言等可能完全改变思维方式(如果我们学会了它们)一样打开视野。最终,学习函数式编程将使我们成为一个更好的程序员。