本頁使用了標題或全文手工轉換

第一類物件

維基百科,自由的百科全書
前往: 導覽搜尋

第一類物件英語:First-class object)在電腦科學中指可以在執行期創造並作為參數傳遞給其他函數或存入一個變數的實體[1]。將一個實體變為第一類物件的過程叫做「物件化」(Reification)[2]

「第一類物件」這一名稱最早由Christopher Strachey在1960年代發明,原稱「第一類公民」(First-class citizen),意指函數可作為電腦語言中的第一類公民。英文中也稱「First-class entity」或「First-class value」。

歷史[編輯]

第一類物件和第二類對象的概念,在1960年由Christopher Strachey 引入。[3][4] 實際上他並沒有給出嚴格的術語定義,而是給出了Algol語言中實數和過程的對比:

第一類物件和第二類對象。在Algol程式語言中,一個「實數」可能會出現在一個表達式中或被賦給一個變量,並可能在過程調用中作為實際參數出現。而「過程」只可能會出現在另一個過程調用中,最常見的是作為操作符,有時候也作為實參。除此之外,沒有表達式會涉及到過程,或者將過程作為計算結果。因此在某種意義上,在Algol程式語言中的過程是第二類變量,它們總是會單獨出現,不可能被一個表達式或一個變量表示(形式參數除外)…[5]

在1990年代,拉斐爾芬克爾[6] 提出了第二類值和第三類值的定義,但這些定義尚未被廣泛採用。[7]

定義[編輯]

第一類物件不一定是物件導向程式設計所指的物件,而可以指任何程式中的實體。一般第一類物件所特有的特性為:

  • 可以被存入變數或其他結構
  • 可以被作為參數傳遞給其他函數
  • 可以被作為函數的返回值
  • 可以在執行期創造,而無需完全在設計期全部寫出
  • 即使沒有被繫結至某一名稱,也可以存在

範例[編輯]

絕大多數語言中,數值與基礎型別都是第一類物件,然而不同語言中對函數的區別很大,例如C語言C++中的函數不是第一類物件,因為在這些語言中函數不能在執行期創造,而必須在設計時全部寫好。相比之下,Scheme中的函數是第一類物件,因為可以用lambda語句來創造匿名函數並作為第一類物件來操作。

參考資料[編輯]

  1. ^ Scott, Michael. Programming Language Pragmatics. San Francisco, CA: Morgan Kaufmann Publishers. 2006: 140. 
  2. ^ J. Malenfant, M. Jacques and F.-N. Demers. A Tutorial on Behavioral Reflection and its Implementation. parc.com. [2010-10-09]. (原始內容存檔於2010-05-28). 
  3. ^ Rod Burstall, "Christopher Strachey—Understanding Programming Languages", Higher-Order and Symbolic Computation 13:52 (2000)
  4. ^ Harold Abelson and Gerald Jay Sussman, Structure and Interpretation of Computer Programs, 2nd edition, section 1.3.4 footnote 64
  5. ^ Christopher Strachey, "Fundamental Concepts in Programming Languages" in Higher-Order and Symbolic Computation 13:11 (2000); though published in 2000, these are notes from lectures Strachey delivered in August, 1967
  6. ^ Finkel, R. Advanced Programming language Design, p 73
  7. ^ Norman Ramsey. About first-,second- and third-class value. http://stackoverflow.com. [14 September 2013].  外部連結存在於|publisher= (幫助)