W ostatnim pytaniu otrzymałem sugestie, aby porozmawiać między innymi o tym aspekcie JavaScript, w którym funkcje są obiektami „pierwszej klasy”. Co w tym kontekście oznacza „pierwsza klasa”, w przeciwieństwie do innych przedmiotów?
EDYCJA (Jörg W Mittag): Dokładne powtórzenie: "Co to jest konstrukcja programistyczna pierwszej klasy?"
javascript
ProfK
źródło
źródło
Odpowiedzi:
Cytując Wikipedię :
Ta strona również pięknie to ilustruje :
przeczytaj także komentarz TrayMan, interesujący ...
źródło
Pojęcie „funkcji pierwszej klasy” w języku programowania zostało wprowadzone przez brytyjskiego informatyka Christophera Stracheya w latach sześćdziesiątych XX wieku. Najbardziej znane sformułowanie tej zasady znajduje się prawdopodobnie w Strukturze i interpretacji programów komputerowych autorstwa Geralda Jaya Sussmana i Harry'ego Abelsona:
Zasadniczo oznacza to, że za pomocą funkcji można zrobić wszystko, co można zrobić ze wszystkimi innymi elementami języka programowania. Tak więc w przypadku JavaScript oznacza to, że wszystko, co możesz zrobić z liczbą całkowitą, ciągiem, tablicą lub jakimkolwiek innym rodzajem obiektu, możesz również zrobić z funkcjami.
źródło
Pełniejsza aprobata preparatu Strachey-Sussman-Abelsona. Więc jeśli twój język obsługuje taką konstrukcję, masz funkcję jako język pierwszej klasy :)
Krótko mówiąc, wszystko jest obiektem pierwszej klasy, jeśli działa w języku jako rodzaj obiektu lub typu obiektu manipulującego stanem. Po prostu coś, na czym można operować, przekazywać instrukcje i oceniać w wyrażeniach w tym samym czasie. Albo jeszcze krócej: kiedy możesz myśleć o funkcji jak o obiekcie, który można dodatkowo wywołać.
źródło
Funkcje JavaScript są funkcjami pierwszej klasy, co oznacza, że funkcje i obiekty są traktowane tak samo. Funkcje mogą być przechowywane jako zmienne wewnątrz obiektu lub tablicy, a także mogą być przekazywane jako argument lub zwracane przez inną funkcję. To sprawia, że funkcja jest „obywatelami pierwszej klasy w JavaScript”
JavaScript używa składni notacji dosłownej, co utrudnia pełne zrozumienie faktu, że funkcje JavaScript są obiektami.
Na przykład..
obie deklaracje są równoważne. Używając
new
wywołujemy funkcję konstruktora obiektu. Również za pomocą{}
(skrótu JavaScript zwanego literałami) wywołujemy funkcję konstrukcyjną obiektu.{}
jest po prostu krótszą reprezentacją do tworzenia wystąpienia konstruktora.Większość języków używa
new
słowa kluczowego do tworzenia obiektu, więc stwórzmy obiekt JavaScript.Jak widać stworzyliśmy nazwę obiektu funkcji .
Tworzenie tej samej funkcji nazwy obiektu przy użyciu wyrażenia funkcji JavaScript.
Zaczynamy, właśnie utworzyliśmy funkcję nazwy obiektu.
źródło
W javascript funkcje są obiektami pierwszej klasy, ponieważ potrafią znacznie więcej niż obiekty.
Function instanceof Object //returns true
Podobnie jak obiekt, funkcja może mieć właściwości i może mieć łącze z powrotem do swojej funkcji konstruktora.
źródło
Prosty test. Jeśli możesz to zrobić w swoim języku (na przykład Python):
Twój język traktuje funkcje jak obiekty pierwszej klasy.
źródło
Oznacza to, że funkcje są obiektami, mają typ i zachowanie. Można je dynamicznie budować i przekazywać jak każdy inny obiekt, a fakt, że można je wywołać, jest częścią ich interfejsu.
źródło
Oznacza to, że funkcja faktycznie dziedziczy po Object. Abyś mógł go przekazywać i pracować z nim jak z każdym innym przedmiotem.
Jednak w języku C # musisz powstrzymać się od delegatów lub refleksji, aby bawić się funkcjami. (ostatnio znacznie się poprawiło dzięki wyrażeniom lambda)
źródło
Definicja na stronie Mozilli jest zwięzła i jasna. Według nich,
I
źródło
Myślę, że jeśli coś jest pierwszej klasy w języku, oznacza to, że jest obsługiwane przez składnię, a nie przez bibliotekę lub cukier składniowy. na przykład klasy w C nie są pierwszą klasą
źródło
Proste w JavaScript funkcje są obiektami pierwszej klasy, to znaczy funkcje są typu Object i mogą być używane w sposób pierwszej klasy jak każdy inny obiekt (String, Array, Number, itp.), Ponieważ w rzeczywistości są obiektami sami. Mogą być „przechowywane w zmiennych, przekazywane jako argumenty do funkcji, tworzone w ramach funkcji i zwracane z funkcji
źródło