【发布时间】:2010-12-09 15:24:07
【问题描述】:
我已经阅读了一些关于所有主题的文章,但我不太明白其中的区别。
【问题讨论】:
标签: functional-programming procedural-programming structured-programming
我已经阅读了一些关于所有主题的文章,但我不太明白其中的区别。
【问题讨论】:
标签: functional-programming procedural-programming structured-programming
结构化编程是一个古老的术语,我认为它涵盖了函数式、过程式和许多其他方面。它基本上意味着使用显式的控制流结构,而不是直接从一条指令跳到另一条指令。
从这个意义上说,函数式编程和过程式编程都是结构化范式。函数式编程也是声明式编程——赋予代码的结构与其含义相对应——程序是改变世界状态的函数。过程式编程是您认为用任何 C 语言或其后代(包括 Java 和 C++ 等 OO 语言)进行的“典型”编程。程序是一系列指令,要串行执行,并在此过程中调用子过程。
或者,正如著名的描述:
函数式编程就像 将您的问题描述给 数学家。命令式编程 就像给一个人下达指令 白痴。
--- arcus, #scheme on Freenode
【讨论】:
函数式编程使用函数作为一等元素。利用高阶函数(获取和/或返回函数);导致强大的结构和精心设计的代码。有些人还关注 FP 的纯度方面,也就是说,在给定相同输入的情况下,函数应该始终返回相同的结果。我相信,这些是 FP 的两个基本支柱。我还认为避免副作用本质上是从加载/存储机器级指令中抽象出一点。
结构化编程可以追溯到 Djikstra 的“Goto Considered Harmful”论文。这意味着使用 if/then/else/elif 结构、do/while/until/for 循环等,而不是使用 goto。它本质上是从比较/分支机器级指令中抽象出来的。结构化编程与函数式编程和过程式编程都是正交的。
我认为,过程式编程是指使用命令式“子例程”(与纯“函数”相对)进行编程,通常由一系列“语句”(相对于“表达式”)组成,并留下副作用。
【讨论】: