Kariowanie funkcji
Proszę przekształcać funkcje wieloargumentowe w łańcuchy wywołań.
Kariowanie funkcji to bezpłatna lekcja JavaScript Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej JavaScript Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs JavaScript Academy zawiera 4 lekcji w sumie.
Czym jest currying
Currying przekształca funkcję przyjmującą wiele argumentów w sekwencję funkcji, z których każda przyjmuje jeden argument.
Zamiast add(1, 2, 3) wywołuje się add(1)(2)(3). Każde wywołanie zwraca kolejną funkcję, aż do zebrania wszystkich argumentów.
Currying napisany ręcznie
Najbardziej przejrzystym sposobem zrozumienia currying jest napisanie zagnieżdżonych funkcji, z których każda zwraca następną i obejmuje domknięciem wcześniejsze argumenty.
function add(a) {
return function (b) {
return function (c) {
return a + b + c;
};
};
}
console.log(add(1)(2)(3));Zagnieżdżone funkcje strzałkowe
Funkcje strzałkowe pozwalają skrócić definicje funkcji curried. Każdy operator => zwraca następną funkcję strzałkową, a ostatnia wykonuje właściwe działanie.
const add = a => b => c => a + b + c;
console.log(add(1)(2)(3));
console.log(add(10)(20)(30));Domknięcia pamiętają argumenty
Currying opiera się na domknięciach. Każda zwrócona funkcja zachowuje odwołanie do zmiennych z zakresu zewnętrznego, dzięki czemu wcześniejsze argumenty pozostają dostępne aż do wykonania ostatniego wywołania.
const greet = greeting => name => greeting + ', ' + name + '!';
const sayHi = greet('Hi');
console.log(sayHi('Ada'));
console.log(sayHi('Grace'));Wywoływanie krok po kroku
Nie trzeba przekazywać wszystkich argumentów naraz. Można zatrzymać się w połowie i zachować częściowy wynik w zmiennej, aby użyć go ponownie.
const add = a => b => c => a + b + c;
const addOne = add(1);
const addOneAndTwo = addOne(2);
console.log(addOneAndTwo(3));
console.log(addOneAndTwo(100));Ogólna funkcja pomocnicza curry
Ręczne pisanie zagnieżdżonych funkcji jest żmudne. Ogólna funkcja pomocnicza curry zbiera argumenty, aż będzie ich wystarczająco dużo, a następnie wywołuje funkcję oryginalną.
function curry(fn) {
return function curried(...args) {
if (args.length >= fn.length) {
return fn(...args);
}
return (...more) => curried(...args, ...more);
};
}
const add = curry((a, b, c) => a + b + c);
console.log(add(1)(2)(3));Elastyczne wywoływanie za pomocą curry
Dobra funkcja pomocnicza curry przyjmuje argumenty w dowolnych grupach. fn.length informuje ją, ile parametrów zadeklarowano w oryginalnej funkcji.
function curry(fn) {
return function curried(...args) {
if (args.length >= fn.length) {
return fn(...args);
}
return (...more) => curried(...args, ...more);
};
}
const add = curry((a, b, c) => a + b + c);
console.log(add(1, 2, 3));
console.log(add(1, 2)(3));
console.log(add(1)(2, 3));Kurryfikacja na potrzeby specjalizacji
Kurryfikacja ułatwia specjalizację: zastosuj pierwszy argument i używaj zwróconej funkcji ponownie w wielu wywołaniach.
const multiply = a => b => a * b;
const double = multiply(2);
const triple = multiply(3);
console.log(double(5));
console.log(triple(5));Kurryfikacja z metodami tablicowymi
Funkcje skurryfikowane doskonale współpracują z map i filter, ponieważ każda z nich tworzy funkcję jednoargumentową gotową przyjąć każdy element.
const greaterThan = min => value => value > min;
const over10 = greaterThan(10);
console.log([5, 12, 8, 20].filter(over10));Kurryfikacja a częściowa aplikacja
Częściowa aplikacja ustala niektóre argumenty, a pozostałe pozostawia do jednego późniejszego wywołania. Kurryfikacja zawsze rozbija funkcję na łańcuch wywołań jednoargumentowych.
Kurryfikacja jest konkretną, w pełni rozłożoną postacią częściowej aplikacji.
const partial = (a, b) => c => a + b + c;
const curried = a => b => c => a + b + c;
console.log(partial(1, 2)(3));
console.log(curried(1)(2)(3));Po co stosować kurryfikację?
Kurryfikacja sprzyja tworzeniu małych, komponowalnych i wielokrotnego użytku funkcji. Naturalnie łączy się z kompozycją funkcji, którą poznają Państwo w następnej części. Najważniejsza obserwacja: funkcja skurryfikowana nigdy nie jest „niekompletna” — po prostu zwraca kolejną funkcję, dopóki nie otrzyma wszystkich argumentów.
const tag = name => content => '<' + name + '>' + content + '</' + name + '>';
const bold = tag('b');
console.log(bold('important'));
console.log(tag('i')('slanted'));Szybkie sprawdzenie
W przypadku const add = a => b => c => a + b + c; do jakiej wartości oblicza się add(1)(2)?
Podsumowanie: kurryfikacja
Poznali Państwo sposób rozkładania funkcji na łańcuchy wywołań jednoargumentowych:
- Funkcje skurryfikowane zwracają nową funkcję dla każdego argumentu za pomocą domknięć.
- Zagnieżdżone funkcje strzałkowe pozwalają zwięźle definiować funkcje skurryfikowane.
- Ogólna funkcja pomocnicza
curryużywafn.length, aby ustalić, kiedy przekazano już wystarczającą liczbę argumentów. - Kurryfikacja umożliwia przejrzystą specjalizację i kompozycję.
Często zadawane pytania
Czy lekcja „Kariowanie funkcji” jest bezpłatna?
Tak — pełny tekst „Kariowanie funkcji” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu JavaScript Academy, przejdź na CoddyKit PRO. Kurs JavaScript Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Kariowanie funkcji”?
Proszę przekształcać funkcje wieloargumentowe w łańcuchy wywołań. Ćwiczysz JavaScript Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć JavaScript Academy?
Nie wymagamy żadnego doświadczenia. JavaScript Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Kariowanie funkcji”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji JavaScript Academy?
Tak. Każda lekcja JavaScript Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Częściowa aplikacja funkcji
- Kariowanie funkcji
- Kompozycja funkcji
- Tworzenie pipe i compose