函数式程序设计(functional programming)和命令式程序设计(imperative programming)的区别

函数式程序设计与命令式程序设计的关键区别在于,函数式程序设计将计算看作数学函数,避免了状态和数据的变化,而命令式程序设计使用改变程序状态的语句。...

关键区别–函数式编程与命令式编程

函数式程序设计与命令式程序设计的关键区别在于,函数式程序设计将计算看作数学函数,避免了状态和数据的变化,而命令式程序设计使用改变程序状态的语句。

编程范例提供了一种构建计算机程序的结构和元素的风格。编程范例有助于根据编程语言的特征对其进行分类。编程语言可能会影响更多的范例。在面向对象的范例中,程序是用对象构造的,而对象是用方法传递消息的。逻辑程序设计只能用数理逻辑来表示计算。另外两种编程范式是函数式编程和命令式编程。函数式编程允许将计算表示为数学函数的求值。命令式编程提供显式更改内存状态的语句。本文讨论函数式编程与命令式编程的区别。

目录

1. 概述和主要区别
2. 什么是函数式编程
3. 什么是命令式编程
4. 函数式编程与命令式编程的相似性
5. 并排比较-函数式编程与表格形式的命令式编程
6.摘要

什么是函数式程序设计(functional programming)?

函数式程序设计是以数学为基础的。函数式编程背后的关键原则是,所有的计算都被看作是独立数学函数的组合。数学函数将输入映射到输出。假设有一个函数叫做f(x)=x*x,x值1映射到输出1。x值2映射到输出4。x值3映射到输出9,依此类推。

函数式程序设计(functional programming)和命令式程序设计(imperative programming)的区别

图01:函数式编程语言——Haskell示例

在函数式编程中,要考虑模式。函数式编程语言Haskell使用下面的方法来求数的总和。

sum函数有整数值,结果也是整数。它可以写成sum:[int]->int。可以按照以下模式进行求和。

sum[n]=n,一个数的和就是这个数本身。

如果有一个数字列表,可以写如下。n代表第一个数字,ns代表其他数字

和(n,ns)=n+和ns。

上面的模式可以用来求3,4,5三个数的和。

3+总和[4,5]

3+(4+和[5])

3+4+5=12

如果一个函数或一个表达式修改了它的作用域之外的某个状态,或者除了返回值外,它还与调用函数发生了可观察的交互作用,则称它具有副作用。函数式编程将这种副作用最小化。状态变化不依赖于函数输入。它在理解程序行为时很有用。函数式编程的一个缺点是,与命令式编程相比,学习函数式编程更困难。

什么是命令式程序设计(imperative programming)?

命令式编程是一种编程范式,它使用改变程序状态的语句。它的重点是描述程序如何运行。Java、C和C等编程语言是命令式编程语言。它提供了一个循序渐进的步骤。命令式编程语言包含if、else、while、for循环、类、对象和函数等结构。

函数式程序设计(functional programming)和命令式程序设计(imperative programming)的区别

图02:命令式编程语言Java示例

十个数字的总和可以在Java中找到,如下所示。在每次迭代中,i值被添加到sum并分配给sum变量。在每次迭代中,求和值将继续加到先前计算的总和上。

整数和=0;

对于(int i=0;i<=10;i++){

sum=总和+i;

}

命令式编程易于学习、理解和调试。由于使用状态变量,很容易找到程序状态。它的一些缺点是它会使代码变得冗长,同时也会使可伸缩性最小化。

什么是函数式程序设计与命令式程序设计的相似性(the similarity between functional programming and imperative programming)?

  • 函数式编程和命令式编程都是编程范例。

函数式程序设计(functional programming)和命令式程序设计(imperative programming)的区别

命令式编程与函数式编程
函数式程序设计是一种将计算视为对数学函数的求值,避免改变状态和可变数据的编程范式。 命令式编程是一种编程范式,它使用语句来改变程序的状态。
结构
函数式编程包含函数调用和高阶函数。 命令式编程包含if、else、while、for循环、函数、类和对象。
程序设计语言
Scala、Haskell和Lisp是函数式编程语言。 C、C++、java是必不可少的编程语言。
专注
函数式编程关注最终结果。 命令式编程侧重于描述程序如何运行。
简单
函数式编程很难。 命令式编程更容易。

总结 - 函数式程序设计(functional programming) vs. 命令式程序设计(imperative programming)

编程范例提供了一种构建计算机程序的结构和元素的风格。函数式编程和命令式编程就是其中的两种。函数式程序设计与命令式程序设计的区别在于,函数式程序设计将计算看作数学函数,避免改变状态和可变数据,而命令式编程使用改变程序状态的语句。

引用

1.“命令式编程”,维基百科,维基媒体基金会,2018年3月28日。此处提供2.“函数式编程”,维基百科,维基媒体基金会,2018年3月28日。此处提供3.Computerphile。YouTube,YouTube,2013年8月30日。点击此处
2.“函数式编程”,维基百科,维基媒体基金会,2018年3月28日
3.计算机爱好者。YouTube,YouTube,2013年8月30日

  • 发表于 2020-10-19 02:12
  • 阅读 ( 476 )
  • 分类:IT

你可能感兴趣的文章

声明的(declarative)和命令式程序设计(imperative programming)的区别

...所有步骤。重点放在应该实现的目标上。 什么是命令式程序设计(imperative programming)? 命令式编程可以像以前一样使用真实场景来解释。要查看新邮件,用户可以登录gmail并不断刷新页面,查看是否收到新邮件。这与命令式编程...

  • 发布于 2020-10-16 09:49
  • 阅读 ( 548 )

结构化的(structured)和非结构化编程(unstructured programming)的区别

结构化的(structured)和非结构化程序设计(unstructured programming)的区别 计算机程序是计算机执行用编程语言编写的任务的一组指令。编程范例可以根据语言特性对编程语言进行分类。结构化编程和非结构化编程是两种常见的编程...

  • 发布于 2020-10-24 05:09
  • 阅读 ( 485 )

哦(oop)和流行音乐(pop)的区别

...可以完成。因此,OOP可以是高效和高生产率的。 考虑到程序设计,OOP遵循自底向上的方法。一些流行的OOP语言是Java、Python、Perl,VB.NET版和C++。 Python是一种流行的OOP语言。 什么是流行音乐(pop)? 面向过程编程(Procedure-orientedprog...

  • 发布于 2020-10-28 20:06
  • 阅读 ( 266 )

你应该知道的5种函数式编程语言

... 什么是函数式程序设计(functional programming)? ...

  • 发布于 2021-03-20 18:46
  • 阅读 ( 620 )

应用程序编程接口(api)和java框架(framework in java)的区别

...dd them to their own programs to solve a problem. It provides the required functionalities to build and deploy an application. A Java framework provides functionalities as a part of a larger software platform. It can c***ist of support programs, compilers, code libraries, toolsets and APIs that sup...

  • 发布于 2021-07-01 01:02
  • 阅读 ( 536 )

建造师(constructor)和方法(method)的区别

...写自己的构造函数,则不会使用默认构造函数。 Figure 1: Program with C***tructor 在上面的Employee类中,有一个名为Employee的构造函数。有两个实例变量id和name。在第8行中,有一个构造函数,它与类名同名。它初始化id和名称。在主程...

  • 发布于 2021-07-01 05:24
  • 阅读 ( 243 )

传递值(pass by value)和通过引用传递(pass by reference)的区别

...编程中有各种各样的概念来编写高效的程序。其中之一是function,它是一组可重用的语句。与其把所有的语句都写在同一个程序中,不如把它分成几个函数,然后在主程序中调用它们。这使得程序更易于管理和维护。在这种情况...

  • 发布于 2021-07-01 08:19
  • 阅读 ( 467 )

线性的(linear)和非线性规划(nonlinear programming)的区别

... 关键术语 线性规划,非线性规划 什么是线性规划(linear programming)? 线性规划是一种数学方法,它允许从给定的一组参数或一组要求中确定最佳可能的结果或解决方案。这些参数或要求具有线性关系。此外,线性规划的主要优...

  • 发布于 2021-07-01 09:39
  • 阅读 ( 888 )

友元函数(friend function)和C++中的正规函数(normal function in c++)的区别

...定任务的一组语句。 C++是Bjarne Stroustrup在1979开发的一种程序设计语言,它与C语言相似,但它的C语言具有更多的特性。C++中的一个主要编程概念是函数。C++具有一个特殊的函数,称为Fuff函数,它与正常函数不同。 覆盖的关键领...

  • 发布于 2021-07-01 11:43
  • 阅读 ( 248 )

数组(array)和c程序设计中的结构(structure in c programming)的区别

...–主要区别的比较 关键术语 数组,结构,C,C++ 什么是c程序设计中的数组(array in c programming)? 数组是一种能够存储属于同一数据类型的元素的数据结构。程序员必须声明数组应该存储的元素数。因此,数组的长度是固定的。...

  • 发布于 2021-07-01 12:48
  • 阅读 ( 222 )

相关推荐