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 维持这种意图,而命令性代码则不会。
顶
收藏
关注
评论
作者:王思明
出处:http://www.cnblogs.com/maanshancss/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。所有源码遵循Apache协议,使用必须添加 from maanshancss
出处:http://www.cnblogs.com/maanshancss/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。所有源码遵循Apache协议,使用必须添加 from maanshancss