Kiedy obiekty lub coś innego mówi się o „pierwszej klasie” w danym języku programowania i dlaczego? Czym różnią się od języków, w których nie są?
EDYTOWAĆ. Kiedy ktoś mówi „wszystko jest przedmiotem” (jak w Pythonie), czy rzeczywiście ma na myśli, że „wszystko jest najwyższej klasy”?
python
language-agnostic
Federico A. Ramponi
źródło
źródło
Odpowiedzi:
Krótko mówiąc, oznacza to, że nie ma żadnych ograniczeń dotyczących używania obiektu. Jest taki sam jak każdy inny obiekt.
Obiektem pierwszej klasy jest obiekt, który można dynamicznie tworzyć, niszczyć, przekazywać do funkcji, zwracać jako wartość i mieć wszystkie prawa, jakie mają inne zmienne w języku programowania.
Źródło .
W funkcjach C ++ same nie są obiektami pierwszej klasy, jednak:
W C ++ klasy nie są obiektami pierwszej klasy, ale instancjami tych klas są. W Pythonie zarówno klasy, jak i obiekty są obiektami pierwszej klasy. (Zobacz tę odpowiedź, aby uzyskać więcej informacji na temat klas jako obiektów).
Oto przykład funkcji pierwszej klasy Javascript:
Źródło .
Elementy, które nie są obiektami pierwszej klasy, są nazywane obiektami drugiej klasy. Funkcje w C ++ są drugiej klasy, ponieważ nie można ich dynamicznie tworzyć.
Jeśli chodzi o edycję:
Termin obiekt może być używany luźno i nie oznacza bycia pierwszą klasą. I prawdopodobnie sensowniej byłoby nazwać całą koncepcję „bytami pierwszej klasy”. Ale w Pythonie starają się, aby wszystko było na najwyższym poziomie. Uważam, że intencja osoby, która złożyła twoje oświadczenie, oznaczała pierwszą klasę.
źródło
„Kiedy ktoś mówi„ wszystko jest przedmiotem ”(jak w Pythonie), czy rzeczywiście ma na myśli, że„ wszystko jest najwyższej klasy ”?
Tak.
Wszystko w Pythonie jest właściwym obiektem. Nawet rzeczy, które są „pierwotnymi typami” w innych językach.
Okazuje się, że taki obiekt
2
ma w rzeczywistości dość bogaty i wyrafinowany interfejs.Ponieważ w Pythonie wszystko jest pierwszorzędnym obiektem, jest stosunkowo mało niejasnych przypadków specjalnych.
Na przykład w Javie istnieją prymitywne typy (int, bool, double, char), które nie są właściwymi obiektami. Dlatego Java musi wprowadzić liczby całkowite, logiczne, podwójne i znakowe jako typy pierwszej klasy. To może być trudne do nauczenia dla początkujących - nie jest oczywiste, dlaczego zarówno prymitywny typ, jak i klasa muszą istnieć obok siebie.
Oznacza to również, że klasa obiektu jest - sama w sobie - obiektem. Różni się to od C ++, gdzie klasy nie zawsze mają wyraźne istnienie w czasie wykonywania.
Typem
2
jesttype 'int'
obiekt, który ma metody, atrybuty i typ.Typem typu wbudowanego
int
jesttype 'type'
obiekt. Ma to również metody i atrybuty.źródło
int
. Zatem „stare” kontra „klasy nowego stylu” (a w 3 nie ma już klas starego stylu).„Pierwsza klasa” oznacza, że możesz operować nimi w zwykły sposób. W większości przypadków oznacza to po prostu, że możesz przekazać tym pierwszorzędnym obywatelom argumenty do funkcji lub zwrócić je z funkcji.
Jest to oczywiste dla obiektów, ale nie zawsze tak oczywiste dla funkcji, a nawet klas:
Jest to przykład w języku C #, w którym funkcje faktycznie nie są obiektami pierwszej klasy. Powyższy kod wykorzystuje zatem małe obejście (mianowicie ogólny delegat
Action<>
), aby przekazać funkcję jako argument. Inne języki, takie jak Ruby, pozwalają traktować nawet klasy i bloki kodu jako normalne zmienne (lub, w przypadku Ruby, stałe).źródło
Ze slajdu Struktura i interpretacja programów komputerowych wykład 2A (1986), który z kolei cytuje Christophera Straceya :
Prawa i przywileje pierwszorzędnych obywateli:
źródło
IMO to jedna z tych metafor używanych do opisu rzeczy w języku naturalnym. Termin ten jest zasadniczo używany w kontekście opisywania funkcji jako obiektów pierwszej klasy.
Jeśli weźmiesz pod uwagę język obiektowy, możemy nadać obiektom różne funkcje, takie jak: dziedziczenie, definicja klasy, możliwość przekazania do innych sekcji kodu (argumenty metody), możliwość przechowywania w strukturze danych itp. Jeśli możemy to zrobić tak samo z bytem, który normalnie nie jest uważany za obiekt, podobnie jak funkcje w przypadku skryptu Java, takie byty są uważane za obiekty pierwszej klasy.
Pierwsza klasa zasadniczo tutaj oznacza, że nie jest traktowana jak druga klasa (ze zdegradowanym zachowaniem). Zasadniczo kpiny są doskonałe lub nierozróżnialne.
źródło