【问题标题】:What's the difference between declarative and imperative programming?声明式编程和命令式编程有什么区别?
【发布时间】:2012-01-02 02:25:58
【问题描述】:

我阅读了 Dino Esposito 和 Andrea Saltarello 的 Microsoft .Net: Architecting Applications for the Enterprise 中关于架构的以下段落:

每当您采用声明性方法进行编码而不是 命令式方法,您将一些责任委托给某些人 另一层代码——你不能完全控制的一层。所以你是 最终希望中间工具能理解你 正确,并且在此过程中不会遇到任何麻烦。在 软件开发,委托给第三方进行开发 更快,但你应该保证用户得到你想要的 他们去。

这并不意味着您不应该信任 Visual Studio 2008 或 类似的基于向导的产品。重点完全是另一回事。 在一个可能由多个团队开发的大型系统中,经典 声明式编程是行不通的。你需要在你的 演示 决定显示内容、显示位置的代码层 阅读设置,以及如何应用它们。声明式编程仍然是 一个不错的选择,但前提是您编写引擎和向导。

谁能用简单的话向我解释一下声明式和命令式编程到底是什么?

【问题讨论】:

  • 查看此 [SO 帖子][1] 以获得 f# 和 c# [1] 的比较:stackoverflow.com/questions/952318/…
  • @AshokPadmanabhan:几乎不适用,因为它是关于 C# 与 F# 的,仅部分关于命令式编程与 函数式 编程(这是声明式编程的一个相当具体的子集) .
  • 向导和声明式编程有什么关系?

标签: c# asp.net .net architecture


【解决方案1】:

声明式 - 我将描述我希望你做什么,你自己弄清楚(SQL、XSLT)。

命令式 - 我会准确地告诉你该做什么,一步一步(C#,Java)。

【讨论】:

  • 对我来说,SQL 听起来比声明性更实用。我认为 XSLT 只是使用 xml 语法的函数式编程,但我对它的了解还不够多。
  • @CodeInChaos - 两者都被描述为声明性的。我刚刚查看了两者的维基百科条目,同意这一点。
【解决方案2】:

声明式编程 - 应该做什么

命令式编程 - 你想要的应该怎么做。

声明式编程要求开发人员说出要做什么。命令式编程要求开发人员逐步定义代码的执行方式。

示例:C# 中的 LINQ 是声明性的。

阅读此处了解更多信息:http://www.informit.com/articles/article.aspx?p=1330154&seqNum=4

【讨论】:

  • LINQ 是简单的函数式编程 IMO。数据绑定、验证属性等就是我所说的声明性。
  • @CodeInChaos - 函数式编程和声明式并不相互排斥。 LINQ 是声明式的,因为你说你想要什么,系统知道如何获取它,无论是从 xml、sql 等。
【解决方案3】:

示例。

声明式编程:

<asp:DropDownList runat="server" DataSourceID="ObjectDataSource1" />
<asp:ObjectDataSource runat="server" ID="ObjectDataSource1" ItemUpdating="..." />

命令式编程:

ObjectDataSource source = new ObjectDataSource();
source.ItemUpdating += ...;

DropDownList list = new DropDownList();
list.ID = "";
list.DataSource = source;
list.DataBind();

【讨论】:

    猜你喜欢
    • 2022-10-15
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    • 1970-01-01
    • 2013-07-23
    • 2016-11-26
    • 1970-01-01
    • 2018-05-06
    相关资源
    最近更新 更多