回答

37

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

在这个意义上,功能和程序编程都是结构化的范例。函数式编程也是声明式编程 - 赋予代码的结构与其含义相对应 - 程序是改变世界状态的函数。程序化编程就是你认为任何C语言或其后代的“典型”编程,包括诸如Java和C++之类的OO语言。程序是一系列指令,要连续执行,并且沿途调用子程序。

或者,因为它已被著名描述:

函数式编程就像是描述你的问题的 数学家 。命令式编程 就像给予一个 白痴的指示。

--- arcus, #scheme on Freenode 
+0

的报价是不是在帮助解决了OP的原来的问题确实有关,因为报价约为之间的差异功能和命令式编程范例(是的,尽管过程式编程通常被认为是命令式编程的子范式)。此外,我认为Java实际上并不支持过程编程,因为在Java中,除了Java 8的新功能(例如lambda函数)之外,所有东西都是类或对象,这些功能可能与函数式编程有关。所以,我必须冷静地回答这个问题。 – nbro 2017-01-08 18:12:17

9

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

结构化编程可追溯到Djikstra的“转向考虑有害”论文。这意味着使用if/then/else/elif结构,do/while/until/for循环等,而不是诉诸goto。它实质上是从比较/分支机器级别指令中抽象出来的。结构化编程与功能和程序编程都是正交的。我相信程序编程指的是用命令性的“子程序”(相对于纯粹的“功能”)编程,该程序通常由一系列“语句”(而不是“表达式”)组成,留下副作用。

+0

我会说程序编程是命令式编程的一个子范式,正如这里所说:https://en.wikipedia。org/wiki/Imperative_programming – nbro 2017-01-08 18:10:30

+0

非常真实,我将删除“(有时”命令式编程“)”。程序确实是一个迫切的问题。很有可能在某些语言中强制性地编程“无”程序。 然而,我认为,“程序”和“功能”之间的关键区别在于前者是势在必行的。我正是这个意思。 – AshleyF 2017-06-13 19:52:17