回答

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