Funkcja wyższego rzędu – definicja

Funkcja wyższego rzędu to funkcja przyjmująca inną funkcję jako argument bądź zwracająca funkcję.

Jeżeli na pierwszy rzut oka może brzmieć to nie jasno to warto zauważyć, że z tego typu funkcjami pracujemy na co dzień (bądź przynajmniej powinniśmy mieć już jakąś styczność) pracując z JavaScriptem.
Najpopularniejsze z nich zostały zaimplementowane już w wersji ECMAScript 5, a należą do nich m.in.:

  • .forEach
  • .map
  • .filter
  • .reduce

Szczególnie .map jest tu często stosowana, a w mojej codziennej pracy zastąpiła w wielu przypadkach pętlę for.

Tworzenie Funkcji wyższego rzędu

Na początku przykład jak stworzyć Funkcję wyższego rzędu bez użycia funkcji strzałkowych, czyli bardziej klasyczne podejście:

function add(x) {
  return function(y) {
     return y + x;
  }
}

let addResult = add(1)(5); //6

Nasza nowo powstała zmienna addResult zawiera już poprawną sumę dwóch podanych liczb. Przy okazji możemy zaobserwować jeden ze sposobów wywołania takiej funkcji z czterema nawiasami. Przykładem z życia może być funkcja connect używana w 'react-redux': connect(mapStateToProps, mapDispatchToProps)(TodoList) .

Powyższy (klasyczny) zapis zastąpić można funkcjami strzałkowymi. Efekt będzie następujący:

const subtract = (x) => y => x - y;

let subtractResult = subtract(5)(1); //4

Identycznie jak w poprzednim przypadku, tutaj również nowo utworzona zmienna zawiera prawidłowy wynik działania (tym razem odejmowania).
Wywołanie funkcji wcale nie musi wyglądać jak w powyższych przykładach. Równie dobrze możemy rozpocząć od wywołania jedynie pierwszej funkcji, a drugą wywołamy w kolejnym kroku. W przykładzie ponownie skorzystamy z funkcji subtract().

let newSubtractWith10 = subtract(10);
let newSubtractResult = newSubtractWith10(5); //5

Sprawdźmy jeszcze czy opisywane powyżej zmienne przybrały wartości zgodne z oczekiwaniami:

Funkcja wyższego rzędu (Higher-Order Functions) w JavaScript

Kontynuując przeglądanie strony, wyrażasz zgodę na używanie przez nas plików cookies. dowiedz się więcej

Aby zapewnić Tobie najwyższy poziom realizacji usługi, opcje ciasteczek na tej stronie są ustawione na "zezwalaj na pliki cookies". Kontynuując przeglądanie strony bez zmiany ustawień lub klikając przycisk "Akceptuję" zgadzasz się na ich wykorzystanie.

Zamknij