功能和命令式编程语言有什么区别?
大多数主流语言,包括面向对象编程(OOP)语言,例如C#,Visual Basic,C ++和Java,都被设计为主要支持命令式(过程式)编程,而Haskell / gofer类语言则是纯功能性的。 任何人都可以详细说明这两种编程方式有什么区别吗?
我知道这取决于用户要求选择编程方式,但为什么建议学习函数式编程语言?
定义:命令式语言使用一系列语句来确定如何达到特定目标。 据说这些声明会依次执行每个程序,从而改变程序的状态。
例子: Java是一种命令式语言。 例如,可以创建一个程序来添加一系列数字:
int total = 0;
int number1 = 5;
int number2 = 10;
int number3 = 15;
total = number1 + number2 + number3;
每个语句都会更改程序的状态,从将值分配给每个变量到最终添加这些值。 使用五个语句序列明确告诉程序如何将数字5,10和15加在一起。
功能语言:功能性编程范例被明确地创建以支持解决问题的纯功能方法。 函数式编程是一种声明式编程。
纯函数的优点:将函数转换实现为纯函数的主要原因是纯函数是可组合的:即自包含和无状态。 这些特性带来了许多好处,其中包括:增加了可读性和可维护性。 这是因为每个功能的设计都是为了完成一个特定的任务。 该功能不依赖于任何外部状态。
更容易重复发展。 由于代码更容易重构,因此对设计的更改通常更容易实现。 例如,假设您编写了一个复杂的转换,然后意识到某些代码在转换中会重复多次。 如果你通过纯粹的方法重构,你可以随意调用你的纯方法,而不用担心副作用。
更简单的测试和调试。 因为纯函数可以更容易地单独测试,所以您可以编写测试代码来调用具有典型值,有效边缘情况和无效边缘情况的纯函数。
对于面向对象的人或命令式语言:
面向对象的语言当你对事物有一组固定的操作时是很好的,随着代码的发展,你主要增加新的东西。 这可以通过添加实现现有方法的新类来实现,并且现有的类单独存在。
当你有一组固定的东西时,功能语言是很好的,随着代码的发展,你主要在现有的东西上增加新的操作。 这可以通过添加使用现有数据类型进行计算的新功能来完成,并且现有的功能可以单独使用。
缺点:
这取决于用户的需求选择编程的方式,所以只有当用户不选择正确的方式时才会造成危害。
当进化错误时,你会遇到问题:
以下是区别:
势在必行:
...等等,然后......
声明性的,其功能是一个子类别:
...等等,然后......
简介:在命令式语言中,您告诉计算机如何更改内存中的位,字节和单词以及顺序。 在功能方面,我们告诉计算机什么是事情,行动等等。 例如,我们说0的阶乘是1,其他每个自然数的阶乘都是该数字与前一阶乘数的乘积。 我们没有说:要计算n的阶乘,保留一个内存区域并在那里存储1,然后将该内存区域中的数字乘以2到n,并将结果存储在相同的位置,最后,内存区域将包含阶乘。
函数式编程是“用函数编程”,函数具有一些预期的数学特性,包括参考透明度。 从这些属性中,进一步的属性流动,特别是通过可导致数学证明(即证明结果的可信度)的可替代性所实现的熟悉的推理步骤。
因此,一个功能程序只是一个表达。
通过在命令式程序中注意表达式不再是引用透明的地方(因此不用函数和值构建,并且本身不能作为函数的一部分),您可以轻松地看到两种样式之间的对比。 两个最明显的地方是:突变(如变量)其他副作用非局部控制流量(例如,例外)
在这个由函数和值组成的表达式框架中,构建了语言,概念,“功能模式”,组合器以及各种类型系统和评估算法的完整实用范例。
根据最极端的定义,几乎任何语言(甚至C或Java)都可以称为功能性的,但通常人们对具有特定相关抽象的语言(例如闭包,不可变值和语法辅助如模式匹配)保留术语。 就使用函数式编程而言,它涉及使用函数并构建没有任何副作用的代码。 用于写作证明
链接地址: http://www.djcxy.com/p/7433.html上一篇: What is difference between functional and imperative programming languages?