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

What is the difference between declarative and procedural programming paradigms?

声明性和过程性编程范例之间的区别是什么?你能举几个例子吗?

还有什么其他的编程模式?


命令性

命令式编程范式有几个亚范式,如过程式或面向对象的编程范式。

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

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

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

面向对象

它通常指的是显示类型层次结构的语言,这些类型从基类型继承方法和状态到派生类型,但也包括异常的基于原型的javascript。

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

  • 爪哇

声明的

声明式编程范式有几个子范式,如函数式或逻辑式编程范式。

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

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

  • YACC
  • 树梢
  • SQL
  • 正则表达式
  • 莱克斯
  • XSLT
  • 标记,troff,css,vhdl

功能性

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

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

  • 哈斯克尔
  • 奥卡姆
  • 方案
  • 二郎
  • 弗斯
  • 斯卡拉

声明性编程是指在不必说明如何进行的情况下说出所需内容的地方。对于过程编程,您必须指定精确的步骤才能获得结果。

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


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

程序性的:

  • 去厨房
  • 吃糖、牛奶和茶,
  • 把它们混在一起,在火上加热到沸腾。
  • 把它放进杯子里拿给我
  • 声明的:

  • 给我倒杯茶。
  • 在程序语言中,您定义整个过程并提供如何执行该过程的步骤。您只需提供订单并定义流程的服务方式。

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


    程序设计:

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

    声明性编程:

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


    在程序方法中,您对指令进行编码以获得结果。在声明性方法中,您将需要解决的问题定义为解决问题的知识。看看我在这两种方法中实现的过程性或声明性方法示例。

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