2. 声明式编程和命令式编程有什么区别?

计算机系统是分层的,也就是下层做一些支持的工作,暴露接口给上层用。注意:语言的本质是一种接口,就是我编程的目的只是为了调用硬件为我做事情;

个人理解 declarative programming 是相对更高层面的编程,也就是很多被被别人特别好的给封装了起来,自己要做的事情少;也就是高级,跟C#一样

计算机的最下层是CPU指令,其本质就是用“变量定义+顺序执行+分支判断+循环”所表达的逻辑过程。计算机应用的最上层是实现人类社会的某种功能。所以所有计算机编码的过程,就是用逻辑表达现实的过程。

层与层之间定义的借口,越接近现实的表达就叫越“声明式”(declarative),越接近计算机的执行过程就叫越“命令式”(imperative)。注意这不是绝对的概念,而是相对的概念。

Declarative programming 声明式:

又称之为"说明式"

你告诉机器你想要什么,机器去做

蔬菜.做成菜(蔬菜沙拉)

常见的声明式有: SQL,HTML,Linq

Imperative programming 命令式:

又称之为"指令式"

命令机器如何去做事情,这样不管你想要什么,它都会按照你的想法编程

洗干净(蔬菜)
混合(蔬菜, 沙拉)
放入盘中(混合物)

举个例子:

leicheng 公司年会说明式就是 每个节目负责人告诉HR我需要什么

命令式就是你们又自己的预算,自己想办法去买,怎么买去哪儿买,自己搞定,记得要发票,拿发票去填写报销流程,去采购,运输,最后跟HR报销

C#中二者对比

// 原来的命令时语法
var petLookup = new Dictionary<int, Pet>();

foreach (var pet in pets)
{
    petLookup.Add(pet.RFID, pet);
}
// 等效的Linq表达式
var petLookup = pets.ToDictionary(pet => pet.RFID);

//代码的意图不是创建新的 Dictionary<int, Pet> 并通过循环在其中添加条目,而是将现有列表转换为字典! LINQ 维持这种意图,而命令性代码则不会。
原文地址:https://www.cnblogs.com/maanshancss/p/13086812.html