函数式编程有什么好处?
你认为函数式编程的好处是什么? 他们今天如何申请程序员?
函数式编程和OOP之间最大的区别是什么?
函数式编程的风格是描述你想要的,而不是如何得到它。 即:不是用迭代器variables创build一个for循环,而是通过一个数组前进到每个单元格执行一些操作,你会说相当于“这个标签指的是这个数组的一个版本,元素“。
函数式编程将更多基本的编程思想引入编译器,比如列表parsing和caching。
函数式编程的最大好处是简洁,因为代码可以更简洁。 一个函数式程序不会创build一个迭代器variables作为循环的中心,所以这个和其他types的开销都会从你的代码中消除。
另一个主要的好处是并发性,这对于函数式编程更容易,因为编译器正在处理大部分需要手动设置状态variables的操作(比如循环中的迭代器)。
在单处理器的情况下,也可以看到一些性能优势,这取决于编写程序的方式,因为大多数function语言和扩展都支持懒处理评估。 在Haskell中,你可以说“这个标签代表一个包含所有偶数的数组”。 这样的数组是无限大的,但是你可以在任何时候请求数组的第100,000个元素,而不必在数组初始化时知道你所需要的最大值。 只有在需要时才会计算该值,而不是进一步计算。
最大的好处是,这不是你习惯的。 select一个像Scheme这样的语言,并学会用它来解决问题,你将成为你已经知道的语言中更好的程序员。 这就像学习第二种人类语言。 你认为别人基本上是你自己的变体,因为你没有什么可以比较的。 接触别人,特别是那些与你已经知道的无关的东西,是有启发性的。
为什么函数式编程很重要
people/staff/dat/miranda/whyfp90.pdf
因此,一个好的起点是尝试理解一些命令式语言中不可能的东西,但是在function语言中是可能的。
如果你谈论的是可计算性,当然在function上没有什么是可能的,但不是命令式编程(反之亦然)。
不同的编程范式的重点不在于使之前不可能的事情成为可能,而是要让事情变得容易,而且以前很难。
函数式编程旨在让您更轻松地编写简洁,无缺陷且可并行的程序。
它不必是一个或另一个:使用像C#3.0这样的语言可以让你混合每个元素的最佳元素。 OO可用于课堂级以上的大型结构,function式用于方法层面的小型结构。
使用function风格允许编写清楚地声明其意图的代码,而不会与控制stream程语句等混淆。由于诸如副作用自由编程之类的原理,因此更容易推理代码并检查其正确性。
我认为function编程需求的最实际的例子是并发性 – function程序自然是线程安全的,并且考虑到多核硬件的兴起,这是最重要的。
函数式编程也增加了模块性 – 您可以经常看到命令中的方法/函数太长 – 几乎看不到函数的长度超过几行。 而且,因为所有东西都是分离的 – 可重用性大大提高,unit testing非常简单。
一旦程序增长,我们词汇表中的命令数量就会变得太高,使用起来非常困难。 这就是面向对象编程使我们的生活更轻松的地方,因为它允许我们以更好的方式组织我们的命令。 我们可以将涉及客户的所有命令与某个客户实体(一个类)相关联,这使得描述更加清晰。 但是,该程序仍然是一系列命令,指定它应该如何进行。
函数式编程提供了一种完全不同的扩展词汇表的方法。 不限于添加新的原始命令; 我们还可以添加新的控制结构 – 原始数据,指定我们如何将命令放在一起来创build一个程序。 在命令式语言中,我们能够按顺序编写命令或使用有限数量的内置结构(如循环)编写命令,但是如果查看典型的程序,仍然会看到许多重复出现的结构; 常见的组合命令的方式
如果您还不知道函数式编程,那么学习它将为您提供更多解决问题的方法。
FP是一种简单的泛化,它将函数提升为一级值,而OOP则用于代码的大规模构build。 然而,有一些重叠的地方,OOPdevise模式可以直接performance出来,使用一stream的function可以更简洁地expression出来。
许多语言都提供FP和OOP,包括OCaml,C#3.0和F#。
干杯,乔恩哈罗普。
不要以“需求”来考虑函数式编程。 相反,把它看作另一种编程技巧,就像OOP,模板,汇编语言等可能在你学习的时候已经彻底改变了你的思维方式一样。 最终,学习函数式编程会使你成为一个更好的程序员。