函式式程式設計(functional programming)和命令式程式設計(imperative programming)的區別

函式式程式設計與命令式程式設計的關鍵區別在於,函式式程式設計將計算看作數學函式,避免了狀態和資料的變化,而命令式程式設計使用改變程式狀態的語句。...

關鍵區別–函數式編程與命令式編程

函數式程序設計與命令式程序設計的關鍵區別在於,函數式程序設計將計算看作數學函數,避免了狀態和數據的變化,而命令式程序設計使用改變程序狀態的語句。

編程範例提供了一種構建計算機程序的結構和元素的風格。編程範例有助於根據編程語言的特徵對其進行分類。編程語言可能會影響更多的範例。在面向對象的範例中,程序是用對象構造的,而對象是用方法傳遞消息的。邏輯程序設計只能用數理邏輯來表示計算。另外兩種編程範式是函數式編程和命令式編程。函數式編程允許將計算表示為數學函數的求值。命令式編程提供顯式更改內存狀態的語句。本文討論函數式編程與命令式編程的區別。

目錄

1. 概述和主要區別
2. 什麼是函數式編程
3. 什麼是命令式編程
4. 函數式編程與命令式編程的相似性
5. 並排比較-函數式編程與表格形式的命令式編程
6.摘要

什麼是函數式程序設計(functional programming)?

函數式程序設計是以數學為基礎的。函數式編程背後的關鍵原則是,所有的計算都被看作是獨立數學函數的組合。數學函數將輸入映射到輸出。假設有一個函數叫做f(x)=x*x,x值1映射到輸出1。x值2映射到輸出4。x值3映射到輸出9,依此類推。

函數式程序設計(functional programming)和命令式程序設計(imperative programming)的區別

圖01:函數式編程語言——Haskell示例

在函數式編程中,要考慮模式。函數式編程語言Haskell使用下面的方法來求數的總和。

sum函數有整數值,結果也是整數。它可以寫成sum:[int]->int。可以按照以下模式進行求和。

sum[n]=n,一個數的和就是這個數本身。

如果有一個數字列表,可以寫如下。n代表第一個數字,ns代表其他數字

和(n,ns)=n+和ns。

上面的模式可以用來求3,4,5三個數的和。

3+總和[4,5]

3+(4+和[5])

3+4+5=12

如果一個函數或一個表達式修改了它的作用域之外的某個狀態,或者除了返回值外,它還與調用函數發生了可觀察的交互作用,則稱它具有副作用。函數式編程將這種副作用最小化。狀態變化不依賴於函數輸入。它在理解程序行為時很有用。函數式編程的一個缺點是,與命令式編程相比,學習函數式編程更困難。

什麼是命令式程序設計(imperative programming)?

命令式編程是一種編程範式,它使用改變程序狀態的語句。它的重點是描述程序如何運行。Java、C和C等編程語言是命令式編程語言。它提供了一個循序漸進的步驟。命令式編程語言包含if、else、while、for循環、類、對象和函數等結構。

函數式程序設計(functional programming)和命令式程序設計(imperative programming)的區別

圖02:命令式編程語言Java示例

十個數字的總和可以在Java中找到,如下所示。在每次迭代中,i值被添加到sum並分配給sum變量。在每次迭代中,求和值將繼續加到先前計算的總和上。

整數和=0;

對於(int i=0;i<=10;i++){

sum=總和+i;

}

命令式編程易於學習、理解和調試。由於使用狀態變量,很容易找到程序狀態。它的一些缺點是它會使代碼變得冗長,同時也會使可伸縮性最小化。

什麼是函數式程序設計與命令式程序設計的相似性(the similarity between functional programming and imperative programming)?

  • 函數式編程和命令式編程都是編程範例。

函數式程序設計(functional programming)和命令式程序設計(imperative programming)的區別

命令式編程與函數式編程
函數式程序設計是一種將計算視為對數學函數的求值,避免改變狀態和可變數據的編程範式。 命令式編程是一種編程範式,它使用語句來改變程序的狀態。
結構
函數式編程包含函數調用和高階函數。 命令式編程包含if、else、while、for循環、函數、類和對象。
程序設計語言
Scala、Haskell和Lisp是函數式編程語言。 C、C++、java是必不可少的編程語言。
專注
函數式編程關注最終結果。 命令式編程側重於描述程序如何運行。
簡單
函數式編程很難。 命令式編程更容易。

總結 - 函數式程序設計(functional programming) vs. 命令式程序設計(imperative programming)

編程範例提供了一種構建計算機程序的結構和元素的風格。函數式編程和命令式編程就是其中的兩種。函數式程序設計與命令式程序設計的區別在於,函數式程序設計將計算看作數學函數,避免改變狀態和可變數據,而命令式編程使用改變程序狀態的語句。

引用

1.“命令式編程”,維基百科,維基媒體基金會,2018年3月28日。此處提供2.“函數式編程”,維基百科,維基媒體基金會,2018年3月28日。此處提供3.Computerphile。YouTube,YouTube,2013年8月30日。點擊此處
2.“函數式編程”,維基百科,維基媒體基金會,2018年3月28日
3.計算機愛好者。YouTube,YouTube,2013年8月30日

  • 發表於 2020-10-19 02:12
  • 閱讀 ( 50 )
  • 分類:科技

你可能感興趣的文章

宣告的(declarative)和命令式程式設計(imperative programming)的區別

...要提供所有步驟。重點放在應該實現的目標上。 什麼是命令式程式設計(imperative programming)? 指令式程式設計可以像以前一樣使用真實場景來解釋。要檢視新郵件,使用者可以登入gmail並不斷重新整理頁面,檢視是否收到新郵件...

  • 發佈於 2020-10-16 09:49
  • 閲讀 ( 56 )

水蟒(anaconda)和python程式設計(python programming)的區別

...學和機器學習任務更加容易。 什麼是python程式設計(python programming)? Python是一種高階的、通用的程式語言。它是免費的,開源的,跨平臺的。它還支援資料型別,如數值、字串、列表、元組和字典。Python是一種多正規化程式語...

  • 發佈於 2020-10-18 11:25
  • 閲讀 ( 55 )

巨集(macro)和行內函數(inline function)的區別

...含表示式,例如#define AREA 4*5.56。 什麼是行內函數(inline function)? 當一個函式被呼叫時,編譯器需要一些時間來執行它。如果函式不是很複雜,程式設計師可以將函式轉換為行內函數。參考以下程式。 圖02:沒有內聯的函式 print_...

  • 發佈於 2020-10-19 00:27
  • 閲讀 ( 43 )

功能原型(function prototype)和c語言中的函式定義(function definition in c)的區別

...函式定義的表格形式 6. 摘要 什麼是c語言中的函式原型(function prototype in c)? 函式原型提供函式宣告。它指定函式的名稱、返回型別、引數。返回型別是從函式返回的資料型別。當函式返回整數時,返回型別為int;當函式返回floa...

  • 發佈於 2020-10-19 16:08
  • 閲讀 ( 75 )

結構化的(structured)和非結構化程式設計(unstructured programming)的區別

結構化的(structured)和非結構化程式設計(unstructured programming)的區別 計算機程式是計算機執行用程式語言編寫的任務的一組指令。程式設計範例可以根據語言特性對程式語言進行分類。結構化程式設計和非結構化程式設計是兩...

  • 發佈於 2020-10-24 05:09
  • 閲讀 ( 74 )

程式(program)和程式(programme)的區別

...要的是要知道,區別只發生在使用這兩個詞的地區。單詞program是美國使用英國單詞program的方式。這就是程式和程式這兩個詞的區別。你見過當你使用軟體時,程式這個詞是如何變成下劃線的嗎?這僅僅是因為在當今的計算世界...

  • 發佈於 2020-10-25 17:37
  • 閲讀 ( 31 )

源程式(source program)和目標程式(object program)的區別

...程式與目標程式的表格形式 5. 摘要 什麼是源程式(source program)? 程式設計師用高階語言編寫源程式。因此,它很容易被人類閱讀。源程式通常包含有意義的變數名和有用的註釋,以使其更具可讀性。機器不能直接執行源程式。...

  • 發佈於 2020-10-26 14:27
  • 閲讀 ( 48 )

哦(oop)和流行音樂(pop)的區別

...為POP語言顯式地引用執行環境的狀態,所以它們也被稱為命令式語言。這類流行語言的例子有COBOL、Pascal、FORTRAN和C語言。 C是流行語。 哦(oop)和流行音樂(pop)的區別 oop和pop的定義 OOP:面向物件程式設計是一種側重於資料抽象的...

  • 發佈於 2020-10-28 20:06
  • 閲讀 ( 47 )

你應該知道的5種函數語言程式設計語言

... 什麼是函式式程式設計(functional programming)? ...

  • 發佈於 2021-03-20 18:46
  • 閲讀 ( 50 )

如何使用click在python中建立自己的命令列程式

... import sysimport randomdef do_work():""" Function to handle command line usage"""args = sys.argvargs = args[1:] # First element of args is the file nameif len(args) == 0:print('You have not passed any commands in!')else:for a in args:if a == '--help':print('Basic co...

  • 發佈於 2021-03-23 13:56
  • 閲讀 ( 67 )

作家榜

  1. admin 0 文章
  2. 孫小欽 0 文章
  3. JVhby0 0 文章
  4. fvpvzrr 0 文章
  5. 0sus8kksc 0 文章
  6. zsfn1903 0 文章
  7. w91395898 0 文章
  8. SuperQueen123 0 文章

相關推薦