您认为函数式编程的好处是什么?它们如何适用于今天的程序员?
函数式编程和OOP之间最大的区别是什么?
函数式编程的风格是描述你想要的东西,而不是如何获得它.即:而不是创建一个带有迭代器变量的for循环,并通过一个数组行进到每个单元格,你会说相当于"这个标签指的是这个函数已经在所有的元素".
函数式编程将更基本的编程思想转移到编译器中,例如列表推导和缓存等思想.
函数式编程的最大好处是简洁,因为代码可以更简洁.函数程序不会创建迭代器变量作为循环的中心,因此从代码中消除了这种和其他类型的开销.
另一个主要好处是并发性,这对于函数式编程更容易,因为编译器正在处理过去需要手动设置状态变量的大多数操作(比如循环中的迭代器).
根据程序的编写方式,在单处理器的上下文中也可以看到一些性能优势,因为大多数函数式语言和扩展都支持惰性求值.在Haskell中,您可以说"此标签表示包含所有偶数的数组".这样的数组是无限大的,但你可以随时要求该数组的第100,000个元素而不必知道 - 在数组初始化时 - 你需要的最大值是什么.该值仅在您需要时计算,不再进一步计算.
最大的好处是它不是你习惯的.选择一种像Scheme这样的语言,学会解决它的问题,你将成为一个更熟悉的语言程序员.这就像学习第二种人类语言.你假设其他人基本上是你自己的变种,因为你没有什么比较它.接触他人,特别是与你已经知道的无关的人,是有益的.
功能编程为何重要
http://www.cs.kent.ac.uk/people/staff/dat/miranda/whyfp90.pdf
因此,一个好的起点是尝试理解一些在命令式语言中不可能但在函数式语言中可能的事情.
如果你在谈论可计算性,那么在功能性而非命令式编程中当然没有任何可能性(反之亦然).
不同编程范式的关键不是让事情变得可能以前是不可能的,而是让事情变得容易,之前很难.
函数式编程旨在让您更轻松地编写简洁,无错误且可并行化的程序.
它不必是一个或另一个:使用像C#3.0这样的语言可以混合每个元素的最佳元素.OO可用于级别及以上级别的大型结构,方法级别的小型结构的功能式.
使用Functional样式允许编写代码,清楚地声明其意图,而不会与控制流语句等混淆.由于副作用自由编程等原则,更容易推理代码,并检查其正确性.
我认为功能编程需求的最实际例子是并发-功能程序自然是线程安全的,并且鉴于多核硬件的兴起,这是至关重要的。
函数式编程还提高了模块性-您经常会看到命令/函数太长了-您几乎看不到函数多于几行。而且由于一切都已解耦-重用性得到了极大改善,单元测试非常非常容易。