陈述性范式和程序编程范式的区别是什么?

陈述性的程序上的编程范例的区别是什么? 你能提供一些例子吗?

还存在哪些其他编程范例?

87800 次浏览

宣告式编程就是你说你想要什么而不用说怎么做。使用程序编程,你必须指定精确的步骤来得到结果。

例如,SQL 更倾向于声明性而非过程性,因为查询不指定生成结果的步骤。

Imperative

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

在命令式编程范例中,你逐步地描述算法,在不同的抽象程度上。

支持过程模式的编程语言示例:

  • C (和大多数其他遗留语言)
  • 主要是 PHP
  • 从某种意义上说,所有的主要语言

Object-Oriented

它通常指的是那些表现出 类型层次结构的语言,类型层次结构从基类型继承方法和状态到派生类型,但也包括不寻常的基于原型的 JavaScript。

支持面向对象模式的编程语言示例:

  • 爪哇咖啡

陈述性的

宣告式编程范式有几个子范式,例如函数式或逻辑编程范式。

在宣告式编程范式中,你描述一个结果或者一个目标,然后你通过“ 黑匣子”得到它。与 势在必行。相反

支持宣告式编程范例的编程语言示例:

  • Yacc
  • 树梢
  • SQL
  • 正则表达式
  • 莱克斯
  • XSLT
  • 标记,troff,CSS,VHDL

功能性的

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

支持声明式函数范例的编程语言示例:

  • Haskell
  • 奥卡姆
  • Scheme
  • 二郎
  • F #
  • 斯卡拉

程序编程:

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

宣告式编程

在 Declarative Event 中,驱动编程集中在一个数据体周围,程序可以采取可选的操作。例如,字处理程序中的每个“事件”都是影响数据、文档的任何鼠标或键盘(或文件)更改。它们不需要按任何顺序执行。事件驱动编程采用小程序(事件处理程序)的形式,所有这些程序都处理一组公共数据,因此每个小程序都可以使用相同的数据,即本例中的文档。

在过程方法中,您将指令编码以实现结果。在声明式方法中,您将需要解决的问题定义为解决问题的知识。看看我在这两种方法中实现的 Procedural or Declarative approach示例。

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

让我给你举个现实生活中的例子: 我需要一杯茶。

Procedural:

  1. 去厨房
  2. 加糖,牛奶和茶,
  3. 把它们混合起来,在火上加热直到沸腾
  4. 放到杯子里,拿给我

声明:

  1. 给我倒杯茶。

In a procedural language, you define the whole process and provide the steps how to do it. You just provide orders and define how the process will be served.

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

两种编程语言的主要区别是, 在程序编程中,我们告诉计算机 abc0解决这个问题,在宣告式编程中,我们告诉计算机 abc1我们想要解决的问题。

So YAML is declarative programming language? Because we define what we want instead of writing actual logic.

I am asking this because if anyone knows Ansible which is configuration management tool, it uses YAML but it still falls in procedural language category.

To address the ansible comment and maybe provide an example between the differences of the two. Ansible is procedural where as something like puppet or terraform are declarative. For example, you create an ansible yaml file to deploy 10 ec2 instances like this:
-ec2: 数到10 图片来源: ami-058c6e5b73b074cd2 Instance _ type: t2.micro

如果运行该文件两次,最终将得到20个 t2.microec2实例。如果您使用像 terraform 这样的声明性语言编写相应的代码并运行两次,那么无论运行多少次,您都只能运行10个 t2.microinstance。声明性语言指定结束状态。过程语言只是执行您告诉它的操作,而不考虑当前或过去的状态。