第一類對象

  第一類對象(英語:First-class object)在計算機科學中指可以在執行期創造並作爲參數傳遞給其他函數或存入一個變數的實體。將一個實體變爲第一類對象的過程叫做“物件化”(Reification)。
  
  “第一類對象”這一名稱最早由克里斯托弗·斯特雷奇在1960年代發明,原稱“第一類公民”(First-class citizen),意指函數可作爲電腦語言中的第一類公民。英文中也稱“First-class entity”或“First-class value”。
  
  第一類對象和第二類對象的概念,在1960年由克里斯托弗·斯特雷奇引入。 實際上他並沒有給出嚴格的術語定義,而是給出了ALGOL語言中實數和過程的對比:
  
  第一類對象和第二類對象。在Algol程序語言中,一個“實數”可能會出現在一個表達式中或被賦給一個變量,並可能在過程調用中作爲實際參數出現。而“過程”只可能會出現在另一個過程調用中,最常見的是作爲操作符,有時候也作爲實參。除此之外,沒有表達式會涉及到過程,或者將過程作爲計算結果。因此在某種意義上,在Algol程序語言中的過程是第二類變量,它們總是會單獨出現,不可能被一個表達式或一個變量表示(形式參數除外)…
  
  在1990年代,拉斐爾芬克爾 提出了第二類值和第三類值的定義,但這些定義尚未被廣泛採用。
  
  第一類對象不一定是面向對象程序設計所指的物件,而可以指任何程序中的實體。一般第一類對象所特有的特性爲:
       可以被存入變數或其他結構
    可以被作爲參數傳遞給其他函數
    可以被作爲函數的返回值
    可以在執行期創造,而無需完全在設計期全部寫出
    即使沒有被繫結至某一名稱,也可以存在
  
  絕大多數語言中,數值與基礎型別都是第一類對象,然而不同語言中對函數的區別很大,例如C語言與C++中的函數不是第一類對象,因爲在這些語言中函數不能在執行期創造,而必須在設計時全部寫好。相比之下,Scheme中的函數是第一類對象,因爲可以用lambda語句來創造匿名函數並作爲第一類對象來操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章