函数式编程、声明式编程和命令式编程是什么意思?
当前回答
命令式编程:告诉“机器”如何做某事,结果你想发生的事情就会发生。
声明式编程:告诉“机器”你想要发生什么,然后让计算机想出如何去做。
命令式的例子
function makeWidget(options) {
const element = document.createElement('div');
element.style.backgroundColor = options.bgColor;
element.style.width = options.width;
element.style.height = options.height;
element.textContent = options.txt;
return element;
}
声明性的例子
function makeWidget(type, txt) {
return new Element(type, txt);
}
注:区别不在于简洁、复杂或抽象。如前所述,区别在于如何做和做什么。
其他回答
这里有一些关于所提到的“类型”的好答案。
我还提供了一些额外的、更“奇特”的概念,通常与函数式编程人群有关:
领域特定语言或DSL编程:创建一种新的语言来处理手头的问题。 元编程:当你的程序编写其他程序时。 进化编程:你构建一个系统,它可以不断地自我改进,或者不断地生成更好的子程序。
命令式编程:告诉“机器”如何做某事,结果你想发生的事情就会发生。
声明式编程:告诉“机器”你想要发生什么,然后让计算机想出如何去做。
命令式的例子
function makeWidget(options) {
const element = document.createElement('div');
element.style.backgroundColor = options.bgColor;
element.style.width = options.width;
element.style.height = options.height;
element.textContent = options.txt;
return element;
}
声明性的例子
function makeWidget(type, txt) {
return new Element(type, txt);
}
注:区别不在于简洁、复杂或抽象。如前所述,区别在于如何做和做什么。
简而言之,一种编程风格越是强调“做什么”(What (to do))而忽略了“如何做”(How (to do))的细节,这种风格就越被认为是声明性的。而imperative则相反。函数式编程与声明式风格相关联。
命令式——表达式描述要执行的动作序列(关联的)
声明性——表达式是对程序行为做出贡献的声明(关联、交换、幂等、单调)
函数式表达式的值仅为效果;语义支持等式推理
对于这些并没有明确客观的定义。以下是我对它们的定义:
命令式——重点是计算机应该采取什么步骤,而不是计算机将会做什么(例如C, c++, Java)。
声明性——重点是计算机应该做什么,而不是它应该如何做(例如SQL)。
函数式——声明性语言的子集,非常注重递归