【问题标题】:What's the difference between functional, structured and procedural programming?函数式编程、结构化编程和过程式编程有什么区别?
【发布时间】:2010-12-09 15:24:07
【问题描述】:

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

【问题讨论】:

    标签: functional-programming procedural-programming structured-programming


    【解决方案1】:

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

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

    或者,正如著名的描述:

    函数式编程就像 将您的问题描述给 数学家。命令式编程 就像给一个人下达指令 白痴。

        --- arcus, #scheme on Freenode
    

    【讨论】:

    • 引用在帮助解决 OP 的原始问题方面并不真正相关,因为引用是关于函数式编程范式和命令式编程范式之间的区别(是的,即使过程编程通常被认为是子范式命令式编程)。此外,我认为 Java 实际上并不支持过程式编程,因为在 Java 中,一切都是类或对象,除了 Java 8 的新特性,例如与函数式编程相关的 lambda 函数。所以,我必须否决这个答案。
    【解决方案2】:

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

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

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

    【讨论】:

    • 我会说过程式编程是命令式编程的一个子范式,正如这里所说:en.wikipedia.org/wiki/Imperative_programming
    • 非常正确,我将删除“(有时是'命令式编程')”放在一边。程序确实是命令的子集。在某些语言中,很有可能没有“过程”进行命令式编程。然而,我相信“过程”和“功能”之间的主要区别在于前者是必要的。我就是这个意思。
    【解决方案3】:
    猜你喜欢
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    • 2013-07-23
    • 2012-01-02
    相关资源
    最近更新 更多