声明性和程序性编程范式之间有什么区别?

时间:2009-10-25 02:45:47

标签: procedural-programming declarative-programming

声明性程序编程范例之间有什么区别?你能提供一些例子吗?

还有其他编程范例吗?

8 个答案:

答案 0 :(得分:101)

势在必行

命令式编程范例有几个子范例,例如 procedural 面向对象的编程范例。

在命令式编程范例中,您将在不同的抽象程度下逐步描述算法。

支持程序范例的编程语言示例:

  • C(以及大多数其他遗留语言)
  • PHP,主要是
  • 在某种意义上,所有主要语言

面向对象

它通常是指具有层次结构的语言,它继承了从基类型到派生类型的方法和状态,但也包括不常见的基于原型的JavaScript。

支持OO范例的编程语言示例:

  • 爪哇

声明

声明性编程范例有几个子范例,例如功能或逻辑编程范例。

在声明性编程范例中,您描述了一个结果或一个目标,并通过“black box”得到它。与命令式相反。

支持声明性编程范例的编程语言示例:

  • YACC
  • 树顶
  • SQL
  • 正则表达式
  • XSLT
  • 标记,troff,CSS,VHDL

功能

功能编程强调功能的应用,没有副作用,也没有可变状态。上述声明性系统展示了函数式编程的某些方面。

支持声明性功能范例的编程语言示例:

  • 的Haskell
  • OCaml的
  • 方案
  • 二郎
  • F#
  • Scala的

答案 1 :(得分:56)

声明性编程是指你想要的东西,而不必说出如何做。使用过程编程,您必须指定获得结果的确切步骤。

例如,SQL比声明更具说明性,因为查询不指定生成结果的步骤。

答案 2 :(得分:19)

让我举一个现实世界的例子:我需要一杯茶。

程序:

  1. 去厨房
  2. 加糖,牛奶和茶,
  3. 将它们混合,然后在火上加热直至沸腾
  4. 将它放入杯中并带给我
  5. <强>声明:

    1. 给我一杯茶。
    2. 在过程语言中,您定义整个过程并提供如何执行的步骤。您只需提供订单并定义如何提供流程。

      在声明性语言中,您只需设置命令或命令,并让它在系统上如何完成该命令。你只需要你的结果而不需要深入研究它应该如何完成。

答案 3 :(得分:5)

程序设计:

在程序编程中,程序启动时,它遵循一组指令。指令可能会根据某些文件或内存内容而改变,但总的来说,它并没有很大的变化。程序的输入通常不是来自实时的用户输入,而是来自预先收集的数据集。

声明性编程:

在声明性事件驱动的编程中,通过程序可以采取的可选操作来集中数据体。例如,文字处理器中的每个“事件”是影响数据(文档)的任何鼠标或键盘(或文件)变化。它们不需要以任何顺序执行。事件驱动编程采用小程序(事件处理程序)的形式,所有程序都处理一组公共数据,因此每个小程序都可以使用相同的数据,本例中的文档。

答案 4 :(得分:1)

两种编程语言之间的主要区别是:  在过程编程中,我们告诉计算机如何解决问题;在声明性编程中,我们告诉计算机要解决的问题

答案 5 :(得分:0)

要解决这个烦人的评论,并可能在两者之间的差异之间提供一个示例。 Ansible是程序性的,例如木偶或terraform是声明性的。例如,您创建一个ansible yaml文件来部署10个ec2实例,如下所示:
-ec2: 数:10 图片:ami-058c6e5b73b074cd2 instance_type:t2.micro

如果要两次运行该文件,最终将有20个t2.micro ec2实例。如果您使用诸如terraform之类的声明性语言编写等效代码并运行两次,则无论您运行多少次,都只会运行10个t2.micro实例。声明性语言指定结束状态。过程语言只是按照您所说的去做,而与当前或过去的状态无关。

答案 6 :(得分:-1)

那么YAML是声明性编程语言?因为我们定义了我们想要的东西,而不是编写实际的逻辑。

我之所以这样问是因为,如果有人知道Ansible,它是配置管理工具,它使用YAML,但它仍然属于过程语言类别。

答案 7 :(得分:-3)

在程序方法中,您可以对指令进行编码以实现结果。在声明性方法中,您可以定义需要解决的问题,作为解决问题的知识。看看我在两种方法中实现的Procedural or Declarative approach示例。

正如您在示例中所看到的,在声明式方法中,您不需要指示如何解决问题。