Objekt první třídy

Objekty první třídy ( anglicky  first-class object , first-class entity , first-class citizen ) v kontextu konkrétního programovacího jazyka jsou prvky, které lze předat jako parametr, vrátit z funkce, přiřadit proměnné [ 1] .

Koncept objektů první a druhé třídy navrhl v roce 1967 Christopher Strachey v článku „Understanding Programming Languages“, kde porovnával procedury jazyka Algol na rozdíl od reálných čísel se sociálně diskriminovanými „občany druhé třídy“. “ ( angličtí  občané druhé třídy ) [2] .

Definice

Objekt se nazývá „objekt první třídy“, pokud je [3] [4] :

Termín "objekt" se zde používá v obecném smyslu a není omezen na objekty programovacího jazyka . Hodnoty nejjednodušších datových typů , jako je integer a float , jsou tedy v mnoha jazycích „prvotřídními objekty“.

Příklady

V C a C++ nemůžete vytvářet funkce za běhu, takže funkce nejsou v těchto jazycích prvotřídními objekty. Současně mohou být ukazatele funkcí předány jako argument a vráceny z jiné funkce, a proto se funkce v C++ někdy nazývají objekty druhé třídy .  V C++ však existuje koncept funkčního objektu , což je prvotřídní objekt a implementuje sémantiku ekvivalentní funkcím [3] .  

V Smalltalk [5] , Scala a JavaScript [6] jsou funkce (metody) a třídy objekty první třídy. Vzhledem k tomu, že operátory ( +, -) jsou ve Smalltalku v podstatě metodami, jsou to také prvotřídní objekty.

Příklad kódu v jazyce Nim .

# přiřadit proceduru k proměnné hodnota var = proc () = echo "hodnota" hodnota () # volání procedury var hodnota2 = hodnota hodnota2 () # volání procedury # procedura bude předána jinému procesu dva ( ): string = return "dva" # postup obdrží další postup proc wrap ( x : proc ) = echo "jedna" echo x () echo "tři" # volání procedury, která obdrží jinou proceduru jako vstupní obal ( dvě ) # procedura, která vrací proceduru proc closure ( x : int ): proc = proc res ( y : int ): int = return y * y + x return res var result = closure ( 2 ) # volání procedury , která vrátí další proceduru echo result ( 3 ) # volání interní procedury

Poznámky

  1. Scott, Michael. Pragmatika programovacího jazyka  (neopr.) . - San Francisco, CA: Morgan Kaufmann Publishers , 2006. - s  . 140 .
  2. Rod Burstall, "Christopher Strachey—Understanding Programming Languages", Higher-Order and Symbolic Computation 13:52 ( 2000) (odkaz není k dispozici) . Získáno 2. listopadu 2013. Archivováno z originálu 12. srpna 2017. 
  3. 12 První třída . C2.com (25. ledna 2006). Získáno 16. července 2012. Archivováno z originálu dne 16. července 2012.
  4. objekt první třídy . catalysoft.com. Získáno 9. října 2010. Archivováno z originálu 6. srpna 2012.
  5. Prvotřídní funkce v mnoha programovacích jazycích (příklady) . Získáno 21. července 2012. Archivováno z originálu 11. června 2010.
  6. Funkce jsou prvotřídní objekty v JavaScriptu (downlink) . Získáno 21. července 2012. Archivováno z originálu dne 27. července 2012.