25

我已经阅读了一些关于所有主题的文章,但我不太明白其中的区别。

4

3 回答 3

42

结构化编程是一个古老的术语,我认为它涵盖了功能性、过程性和许多其他方面。它基本上意味着使用显式的控制流结构,而不是直接从一条指令跳到另一条指令。

从这个意义上说,函数式编程和过程式编程都是结构化范式。函数式编程也是声明式编程——赋予代码的结构与其含义相对应——程序是改变世界状态的函数。过程式编程是您认为任何 C 语言或其后代(包括 Java 和 C++ 等 OO 语言)中的“典型”编程。程序是一系列指令,要串行执行,并在此过程中调用子过程。

或者,正如著名的描述:

函数式编程就像向数学家描述你的问题。命令式编程就像给白痴下指令。

    --- arcus, #scheme on Freenode
于 2010-12-09T17:50:52.327 回答
13

函数式编程使用函数作为第一类元素。利用高阶函数(获取和/或返回函数);导致强大的结构和精心设计的代码。有些人还关注 FP 的纯度方面,也就是说,在给定相同输入的情况下,函数应该始终返回相同的结果。我相信,这些是 FP 的两个基本支柱。我还认为避免副作用本质上是从加载/存储机器级指令中抽象出来的。

结构化编程可以追溯到 Djikstra 的“Goto Considered Harmful”论文。这意味着使用 if/then/else/elif 结构、do/while/until/for 循环等,而不是使用 goto。它本质上是从比较/分支机器级指令中抽象出来的。结构化编程与函数式编程和过程式编程都正交。

我相信,过程式编程是指使用命令式“子例程”(与纯“函数”相反)进行编程,通常由一系列“语句”(与“表达式”相反)组成,留下副作用。

于 2010-12-09T18:00:10.503 回答