首页 > C# > 编程中的声明式范式和命令式范式有什么区别?

编程中的声明式范式和命令式范式有什么区别?

上一篇 下一篇

我一直在网上搜索,寻找声明式和命令式编程的定义,这将为我提供一些启示。然而,我发现的一些资源中使用的语言令人生畏 – 例如在维基百科。
有没有人可以向我展示一个真实世界的例子,可能会为这个主题带来一些观点(也许在 C# 中)?

分割线

网友回答:

声明式编程是当你说你想要的东西,命令式语言是当你说如何得到你想要的东西时。

Python中的一个简单的例子:

# Declarative
small_nums = [x for x in range(20) if x < 5]

# Imperative
small_nums = []
for i in range(20):
    if i < 5:
        small_nums.append(i)

第一个示例是声明性的,因为我们没有指定构建列表的任何“实现细节”。

通常,为了配合 C# 示例,使用 LINQ 会产生声明性样式,因为您没有说如何获取所需的内容;你只是在说你想要。你可以对SQL说同样的话。

声明式编程的一个好处是,它允许编译器做出决策,这些决策可能会产生比手动编写的代码更好的代码。使用 SQL 示例运行,如果您有类似

SELECT score FROM games WHERE id < 100;

SQL“编译器”可以“优化”此查询,因为它知道这是一个索引字段 – 或者它可能没有索引,在这种情况下,它无论如何都必须迭代整个数据集。或者,SQL 引擎可能知道这是利用所有 8 个内核进行快速并行搜索的最佳时机。作为一名程序员,你不关心这些条件中的任何一个,也不必编写代码来以这种方式处理任何特殊情况。id

分割线

网友回答:

声明式编程与命令式编程的一个很好的 C# 示例是 LINQ。

通过命令式编程,您可以逐步告诉编译器您想要发生什么。

例如,让我们从这个集合开始,然后选择奇数:

List<int> collection = new List<int> { 1, 2, 3, 4, 5 };

通过命令式编程,我们将逐步完成此操作,并决定我们想要什么:

List<int> results = new List<int>();
foreach(var num in collection)
{
    if (num % 2 != 0)
          results.Add(num);
}

在这里,我们说:

  1. 创建结果集合
  2. 单步执行集合中的每个数字
  3. 检查数字,如果奇数,将其添加到结果中

另一方面,使用声明式编程,您可以编写描述所需内容的代码,但不一定如何获取它(声明所需的结果,但不是分步):

var results = collection.Where( num => num % 2 != 0);

在这里,我们说的是“给我们所有奇怪的地方”,而不是“逐步浏览集合。检查此项,如果很奇怪,请将其添加到结果集合中。

在许多情况下,代码也将是两种设计的混合体,因此它并不总是黑白的。

分割线

网友回答:

声明式与命令式

编程范式是计算机编程的基本风格。
有四种主要范式:命令式、声明式、函数式(被认为是声明式范式的子集)和面向对象。

声明式编程:是一种表达计算逻辑(What do)而不描述其控制流(How do)的编程范式。
声明性域特定语言(DSL)的一些众所周知的例子包括CSS,正则表达式和SQL的子集(例如SELECT查询)
许多标记语言,如HTML,MXML,XAML,XSLT。通常是声明性的。
声明式编程试图模糊作为一组指令的程序和作为关于所需答案的断言的程序之间的区别。

命令式编程:是一种编程范式,它根据更改程序状态的语句来描述计算。命令式程序可以双重视为编程命令或数学断言。

函数式编程:是一种将计算视为数学函数的评估并避免状态和可变数据的编程范式。它强调函数的应用,与强调状态变化的命令式编程风格相反。
在纯函数式语言(如 Haskell)中,所有函数都没有副作用,状态更改仅表示为转换状态的函数。

下面的 MSDN 命令式编程示例遍历数字 1 到 10,并查找偶数。

var numbersOneThroughTen = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
//With imperative programming, we'd step through this, and decide what we want:
var evenNumbers = new List<int>();
foreach (var number in numbersOneThroughTen)
{    if (number % 2 == 0)
    {
        evenNumbers.Add(number);
    }
}
//The following code uses declarative programming to accomplish the same thing.
// Here, we're saying "Give us everything where it's even"
var evenNumbers = numbersOneThroughTen.Where(number => number % 2 == 0);

这两个例子产生相同的结果,一个既不比另一个更好也不比另一个差。第一个示例需要更多的代码,但代码是可测试的,命令式方法使您可以完全控制实现细节。在第二个示例中,代码可以说更具可读性;但是,LINQ 不允许您控制幕后发生的情况。您必须相信 LINQ 将提供请求的结果。

模板简介:该模板名称为【编程中的声明式范式和命令式范式有什么区别?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【C#】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 251次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 03-17
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
响应式 微信素材 自适应 微信文章 企业网站 微信模板 单页式简历模板 微信公众平台 html5 微信图片
您可能会喜欢的其他模板