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] .
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“.
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