您认为函数式编程的好处是什么?以及它们如何适用于当今的程序员?
函数式编程和OOP之间的最大区别是什么?
您认为函数式编程的好处是什么?以及它们如何适用于当今的程序员?
函数式编程和OOP之间的最大区别是什么?
Answers:
函数式编程的风格是描述您想要的东西,而不是如何获得它。即:不是说用迭代器变量创建for循环并遍历数组对每个单元格做事,而是说“等效于此标签指的是该数组的一个版本,其中所有元素。”
函数式编程将更基本的编程思想(例如列表推导和缓存)移入了编译器。
函数式编程的最大好处是简洁,因为代码可以更简洁。函数式程序不会将迭代器变量创建为循环的中心,因此可以从代码中消除此类开销和其他开销。
另一个主要好处是并发性,并发性更易于使用函数式编程,因为编译器会处理大多数以前需要手动设置状态变量的操作(例如循环中的迭代器)。
在某些情况下,也可以在单处理器环境中看到一些性能优势,这取决于程序的编写方式,因为大多数功能语言和扩展都支持延迟评估。在Haskell中,您可以说“此标签代表包含所有偶数的数组”。这样的数组是无限大的,但是您可以随时请求该数组的第100,000个元素,而不必在数组初始化时知道您将需要的最大值是多少。仅在需要时才计算该值,而不会进行进一步计算。
最大的好处是,这不是您所习惯的。选择像Scheme这样的语言并学习解决其问题,您将成为使用已经知道的语言的更好的程序员。就像学习第二种人类语言一样。您认为其他人基本上就是您自己的变体,因为您没有可与之比较的东西。暴露于他人(特别是与您所知道的事物无关的事物)具有启发性。
为什么函数式编程很重要
http://www.cs.kent.ac.uk/people/staff/dat/miranda/whyfp90.pdf
抽象
随着软件变得越来越复杂,良好地构建软件就变得越来越重要。结构良好的软件易于编写和调试,并提供了可重复使用的模块集合,以减少未来的编程成本。
在本文中,我们证明了功能语言的两个特征,特别是高阶函数和惰性求值,可以极大地促进模块化。例如,我们操纵列表和树,编写几种数值算法,并实现alpha-beta启发式(一种来自AI的算法,用于游戏程序)。我们得出结论,由于模块化是成功编程的关键,因此函数式编程为软件开发提供了重要的优势。
不必一定要是另一种:使用C#3.0之类的语言,您可以混合每个元素的最佳元素。OO可用于类级别及更高级别的大型结构,功能样式可用于方法级别的小型结构。
使用Functional样式可以编写清楚地声明其意图的代码,而不会与控制流语句等混淆。由于诸如副作用自由编程之类的原理,推理代码和检查其正确性要容易得多。 。
我认为功能编程需求的最实际例子是并发-功能程序自然是线程安全的,并且鉴于多核硬件的兴起,这是最重要的。
函数式编程还提高了模块性-您经常会看到命令/函数太长了-您几乎看不到函数多于几行。而且,由于一切都是解耦的,因此可重用性得到了极大改善,单元测试非常简单。
一旦程序增长,我们词汇表中的命令数量就变得太多,很难使用。这是面向对象编程使我们的生活更轻松的地方,因为它使我们可以更好地组织命令。我们可以将涉及客户的所有命令与某个客户实体(一个类)相关联,这使得描述更加清晰。但是,该程序仍然是指定应如何进行的一系列命令。
函数式编程提供了完全不同的词汇扩展方式。不限于添加新的原始命令;我们还可以添加新的控制结构-这些原始结构指定了我们如何将命令组合在一起以创建程序。在命令式语言中,我们能够按顺序或使用有限的内置构造(例如循环)来编写命令,但是如果您查看典型的程序,仍然会看到许多重复出现的结构。组合命令的常用方法