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