Občan první třídy - First-class citizen
v návrh programovacího jazyka, a občan první třídy (taky typ, objekt, subjektnebo hodnota) v dané programovací jazyk je entita, která podporuje všechny operace obecně dostupné ostatním entitám. Tyto operace obvykle zahrnují předávání jako argument, vrácení z funkce, úpravy a přiřazení proměnné.[1]
Dějiny
Koncept objektů první a druhé třídy představil Christopher Strachey v šedesátých letech.[2][3] Ve skutečnosti nedefinoval tento termín striktně, ale porovnal skutečná čísla a postupy v ALGOL:
Objekty první a druhé třídy. V ALGOLU se reálné číslo může objevit ve výrazu nebo jej lze přiřadit k proměnné a jeden z nich se může zobrazit jako skutečný parametr ve volání procedury. Procedura se na druhou stranu může objevit pouze v jiném volání procedury buď jako operátor (nejběžnější případ), nebo jako jeden ze skutečných parametrů. Neexistují žádné další výrazy týkající se postupů nebo jejichž výsledky jsou postupy. Postupy v ALGOLU jsou tedy v jistém smyslu občany druhé třídy - vždy se musí dostavit osobně a nikdy nemohou být zastoupeni proměnnou nebo výrazem (s výjimkou formálního parametru) ...[4]
Robin Popplestone dal následující definici: Všechny položky mají určitá základní práva.
- 1. Všechny položky mohou být skutečnými parametry funkcí
- 2. Všechny položky lze vrátit jako výsledky funkcí
- 3. Všechny položky mohou být předmětem přiřazovacích příkazů
- 4. Všechny položky mohou být testovány na rovnost.
V průběhu 90. let Raphael Finkel[6] navrhované definice hodnot druhé a třetí třídy, ale tyto definice nebyly široce přijaty.[7]
Příklady
Nejjednodušší skalární datové typy, jako jsou celá čísla a čísla s plovoucí desetinnou čárkou, jsou téměř vždy prvotřídní.
V mnoha starších jazycích pole a řetězce nejsou prvotřídní: nelze je přiřadit jako objekty ani předat jako parametry podprogramu. Například ani jeden Fortran IV ani C podporuje přiřazení pole, a když jsou předány jako parametry, je ve skutečnosti předána pouze poloha jejich prvního prvku - jejich velikost je ztracena. Zdá se, že C podporuje přiřazení pole ukazatele, ale ve skutečnosti se jedná pouze o ukazatele na první prvek pole a opět nenesou velikost pole.
Ve většině jazyků typy dat nejsou prvotřídními objekty, i když v některých objektově orientovaných jazycích třídy jsou prvotřídními objekty a jsou instancemi metaclasses.
Podpora několika jazyků pokračování a JÍT DO - štítky jako objekty vůbec, natož jako prvotřídní objekty.
Pojem | Popis | Jazyky |
---|---|---|
prvotřídní funkce | uzávěry a anonymní funkce | Šipka, Systém, ML, Haskell, F#, Kotlin, Scala, Rychlý, PHP, Krajta, Raku, JavaScript, Delphi |
prvotřídní ovládání | pokračování | Systém, ML, F# |
prvotřídní typ | závislé typy | Coq, Idrisi, Agda |
prvotřídní datový typ | Obecný Haskell. C ++ 11 | |
prvotřídní polymorfismus | impredikativní polymorfismus | |
prvotřídní zpráva | dynamický zprávy (volání metod) | Pokec,[8] Cíl-C[8] |
prvotřídní třída | metaclass | Pokec, Cíl-C, Rubín, Krajta, Delphi |
prvotřídní důkazy | důkazní objekt[9] | Coq, Agda |
Funkce
Mnoho programovacích jazyků podporuje předávání a vracení hodnot funkcí, které lze použít na argumenty. Zda to stačí k volání funkčních hodnot první třídy, je sporné.
Někteří autoři vyžadují, aby bylo možné vytvářet nové funkce za běhu jim říkat „prvotřídní“. Výsledkem je, že funkce v C nejsou prvotřídními objekty; místo toho se někdy nazývají objekty druhé třídy, protože s nimi lze stále manipulovat ve většině výše uvedených módů (přes ukazatele funkcí ).
v Pokec, funkce (metody) jsou prvotřídní objekty, stejně jako třídy Smalltalk. Protože operátory Smalltalk (+, -, atd.) Jsou metody, jsou také prvotřídními objekty.
Odraz
Některé jazyky, například Jáva a PHP, mít explicitní odraz subsystém, který umožňuje přístup k interním implementačním strukturám, i když nejsou přístupné nebo manipulovatelné stejným způsobem jako běžné objekty.
Viz také
Reference
- ^ Scott, Michael (2006). Programovací jazyková pragmatika. San Francisco, CA: Morgan Kaufmann Publishers. str.140.
- ^ Rod Burstall, „Christopher Strachey - porozumění programovacím jazykům“, Vyšší řád a symbolický výpočet 13:52 (2000)
- ^ Harold Abelson a Gerald Jay Sussman, Struktura a interpretace počítačových programů, 2. vydání, oddíl 1.3.4 poznámka pod čarou 64 Archivováno 09.03.2015 na Wayback Machine
- ^ Christopher Strachey, "Základní koncepty v programovacích jazycích" v Vyšší řád a symbolický výpočet 13: 11 (2000); Ačkoli vyšly v roce 2000, jedná se o poznámky z přednášek, které Strachey přednesl v srpnu 1967
- ^ R. J. Popplestone: Filozofie designu POP-2. in: D. Michie: Machine Intelligence 3, Edinburgh at the University Press, 1968
- ^ Finkel, R. Pokročilý design programovacího jazyka, s. 73
- ^ Norman Ramsey. „O hodnotě první, druhé a třetí třídy“. stackoverflow.com. Citováno 14. září 2013.
- ^ A b Paritosh Shroff, Scott F. Smith. Zadejte odvození pro zprávy první třídy s funkcemi shody
- ^ Bove, Ana; Dybjer, Peter (2009). „Závislé typy v práci“ (PDF). Jazykové inženýrství a důkladný vývoj softwaru. 5520: 57–99. doi:10.1007/978-3-642-03153-3_2. Archivováno (PDF) z původního dne 2. dubna 2014. Citováno 8. června 2015. (taky archivováno )