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