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

Tar*_*rik 90 procedural-programming declarative-programming

声明性程序性编程范式之间有什么区别?你能举个例子吗?

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

Dig*_*oss 105

势在必行

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

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

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

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

面向对象

它通常指的是展示类型层次结构的语言,这些类型继承了从基类型到派生类型的方法和状态,但也包括基于原型的不寻常的JavaScript.

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

  • Java的

陈述

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

在声明性编程范例中,您描述了一个结果或目标,并通过" 黑匣子 " 得到它.与命令相反.

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

  • YACC
  • 树冠
  • SQL
  • 常用表达
  • XSLT
  • 标记,troff,CSS,VHDL

实用

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

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

  • 哈斯克尔
  • OCaml的
  • 方案
  • 二郎神
  • F#
  • 斯卡拉


Ned*_*der 59

声明式编程是您说出自己想要的内容而无需说明如何操作的地方.使用过程编程,您必须指定获取结果的确切步骤.

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

  • Mauris:也许不是一种编程语言,但HTML是声明性的,因为你描述了你想要的东西(带有*这一位*的段落以粗体显示),而不是写出"绘制字符串,测量字符串,提前位置等".另一个例子是Prolog,其中"程序"是一组声明的事实和关系/推论,以及一个查询.Prolog引擎计算出如何评估查询:您不需要告诉它如何执行此操作.最后,正则表达式:您描述模式而不是拼写测试匹配的步骤. (5认同)
  • +1是关于SQL的好例子.我们可以有更多的例子吗? (2认同)

Muh*_*hir 22

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

程序:

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

声明:

  1. 给我一杯茶.

在过程语言中,您可以定义整个过程并提供如何执行的过程.您只需提供订单并定义如何提供流程.

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

  • 我想知道“ 1.茶,伯爵茶,热茶”是否会是一个更好的例子。这是在声明需要传达的内容,而不是要执行的动作(“让我...”) (3认同)
  • 这个极其简化的示例实际上使我明白了这一点。但是,有一件事仍然困扰着我,试图理解它们之间的区别-如果没有“给我喝杯茶”的命令怎么办?然后,您必须自己创建它吗?如果是这样,您是否会创建一个类似于过程示例的函数?我想让我感到困惑的是,似乎_procedural_和_declarative_不是任何特定_language_的固定属性,而是您如何使用该语言?如果可以使用Java,您可以说_“给我喝杯茶” _。 (2认同)
  • 马格努斯,你的问题绝对正确。在我看来,声明性语言是更高级的语言,并且源自过程性语言。还记得开发人员需要使用命令行来添加两个数字的时候吗?现在您只需一个简单的函数即可获得两个或多个数字的总和。所以在我看来,如果没有“给我一杯茶”命令,你就需要创建它。当下一个人尝试使用时,它就会在那里。这是根据我有限的知识。谢谢 (2认同)

Sat*_*tiS 5

程序设计:

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

声明性编程:

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