Jest różnica. Kiedy mówisz, że język ma funkcje pierwszej klasy, oznacza to, że język traktuje funkcje jako wartości - że możesz przypisać funkcję do zmiennej, przekazać ją innym itp. Funkcje wyższego rzędu to funkcje, które działają na innych funkcjach, co oznacza że przyjmują jedną lub więcej funkcji jako argument i mogą również zwrócić funkcję.
Pojęcie „wyższego rzędu” można zastosować do funkcji w ogóle, takich jak funkcje w sensie matematycznym. Koncepcja „pierwszej klasy” dotyczy tylko funkcji w językach programowania. Rzadko jest używany w odniesieniu do funkcji, takiej jak „funkcja pierwszej klasy”. O wiele częściej mówi się, że „język ma / nie obsługuje funkcji pierwszej klasy”.
Te dwie rzeczy są ze sobą ściśle powiązane, ponieważ trudno sobie wyobrazić język z funkcjami pierwszej klasy, który nie obsługiwałby również funkcji wyższego rzędu, i odwrotnie, język z funkcjami wyższego rzędu, ale bez obsługi funkcji pierwszej klasy.
int
lubchar
, w tym sensie, że nie można ich jawnie zdefiniować (przez treść funkcji), gdziekolwiek chcesz.Funkcje pierwszej klasy to funkcje, które są traktowane jak obiekt (lub można je przypisać do zmiennej).
Funkcje wyższego rzędu to funkcje, które przyjmują co najmniej jedną funkcję pierwszej klasy jako parametr lub zwracają co najmniej jedną funkcję pierwszej klasy.
źródło
Są różni.
Funkcje pierwszej klasy
Wartości w języku, które są obsługiwane jednolicie w całym języku, nazywane są „pierwszą klasą”. Mogą być przechowywane w strukturach danych, przekazywane jako argumenty lub używane w strukturach sterujących.
O językach, które obsługują wartości z typami funkcji i traktują je tak samo jak wartości niebędące funkcjami, można powiedzieć, że mają „funkcje pierwszej klasy”.
Funkcje wyższego rzędu
Jedną z konsekwencji posiadania funkcji pierwszej klasy jest to, że powinieneś być w stanie przekazać funkcję jako argument do innej funkcji. Ta ostatnia funkcja jest teraz „wyższego rzędu”. Jest to funkcja, która przyjmuje funkcję jako argument.
Przykład kanoniczny to „mapa”
Oznacza to, że pobiera funkcję i tablicę i zwraca nową tablicę z funkcją zastosowaną do każdego elementu.
Języki funkcyjne - języki, w których funkcje są podstawowym środkiem budowania programów - wszystkie mają funkcje pierwszej klasy. Większość ma również funkcje wyższego rzędu (bardzo rzadkimi wyjątkami są języki takie jak Excel, o którym można powiedzieć, że jest funkcjonalny, ale nie wyższego rzędu).
źródło
Oprócz poprzednich odpowiedzi zwróć uwagę, że język z funkcjami pierwszej klasy automatycznie umożliwia wyrażanie funkcji wyższego rzędu (ponieważ funkcje można przekazywać jako parametry, jak każda inna wartość).
Z drugiej strony można sobie wyobrazić języki, które obsługują funkcje wyższego rzędu, ale nie czynią funkcji pierwszorzędnymi (i gdzie parametry, które są funkcjami, są traktowane specjalnie i różnią się od „zwykłych” parametrów wartości).
Zatem obecność funkcji pierwszej klasy (jako cechy języka) implikuje obecność funkcji wyższego rzędu, ale nie na odwrót.
źródło
Funkcje pierwszej klasy mogą:
Funkcja wysokiego rzędu to funkcja zwracająca inną funkcję.
Na przykład:
źródło
Funkcje pierwszej klasy oznaczają wszystko, co możesz zrobić z innymi typami (zmienne, wartości logiczne, liczby ...), możesz to zrobić za pomocą funkcji.
Na przykład przypisz je do zmiennych, przekaż dalej, utwórz je w locie.
źródło