Currying i częściowa aplikacja
Przekształcaj funkcje wieloargumentowe w postacie curried
Currying i częściowa aplikacja to bezpłatna lekcja TypeScript 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 TypeScript Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs TypeScript Academy zawiera 4 lekcji w sumie.
Czym jest currying?
Currying przekształca funkcję przyjmującą wiele argumentów w łańcuch funkcji jednoargumentowych. Zamiast f(a, b) wywołuje się f(a)(b).
Klasyczny przykład
W tym przykładzie add przyjmuje jedną liczbę i zwraca funkcję oczekującą na następną. TypeScript automatycznie wywnioskuje typy zagnieżdżonych funkcji.
const add = (a: number) => (b: number) => a + b;
console.log(add(2)(3)); // 5Typowanie funkcji po curryingowaniu
Jawny typ wyraźnie pokazuje łańcuch: funkcję zwracającą funkcję. Każda strzałka odpowiada jednemu argumentowi.
type Add = (a: number) => (b: number) => number;
const add: Add = a => b => a + b;
console.log(add(10)(5)); // 15Częściowa aplikacja
Częściowa aplikacja ustala niektóre argumenty teraz, a pozostałe dostarcza później. W przypadku funkcji po curryingowaniu wystarczy wywołać ją, wykonując mniej kroków.
const add = (a: number) => (b: number) => a + b;
const add10 = add(10); // partially applied
console.log(add10(1), add10(2)); // 11 12Dlaczego częściowa aplikacja pomaga
Można tworzyć wyspecjalizowane funkcje na podstawie ogólnych. add10 to wielokrotnego użytku, nazwane narzędzie wyprowadzone z ogólnej funkcji add, co poprawia czytelność i możliwość ponownego użycia.
Currying trzech argumentów
Ten wzorzec można rozszerzyć na dowolną liczbę argumentów. Każdy poziom przechwytuje jeden argument w domknięciu, aż do uzyskania końcowej wartości.
const clamp = (min: number) => (max: number) => (x: number) =>
Math.min(Math.max(x, min), max);
const toByte = clamp(0)(255);
console.log(toByte(300), toByte(-5)); // 255 0Świetnie sprawdza się z map i filter
Funkcje po curryingowaniu dobrze pasują do metod tablicowych, ponieważ map oczekuje funkcji jednoargumentowej. Częściowa aplikacja tworzy dokładnie taką funkcję.
const mul = (a: number) => (b: number) => a * b;
const triple = mul(3);
console.log([1, 2, 3].map(triple)); // [3, 6, 9]Generyczny pomocnik do curryingowania
Można napisać typowanego pomocnika, który poddaje curryingowaniu funkcję dwuargumentową. Generyki zachowują precyzyjne typy parametrów i wyniku.
function curry2<A, B, R>(f: (a: A, b: B) => R) {
return (a: A) => (b: B) => f(a, b);
}
const join = curry2((a: string, b: string) => a + b);
console.log(join("foo")("bar")); // foobarDomknięcia przechwytują argumenty
Currying działa, ponieważ każda zwrócona funkcja zachowuje w domknięciu wcześniejsze argumenty. Wartości te pozostają dostępne, dopóki nie zostaną użyte przez końcowe wywołanie.
const greet = (greeting: string) => (name: string) =>
greeting + ", " + name;
const hi = greet("Hi");
console.log(hi("Sam")); // Hi, SamKiedy nie stosować curryingowania
Curryingowanie każdej funkcji może pogorszyć czytelność. Warto po nie sięgać wtedy, gdy częściowa aplikacja rzeczywiście jest użyteczna, na przykład podczas konfigurowania pomocników wielokrotnego użytku lub składania potoków.
Currying a argumenty domyślne
Parametry domyślne zapewniają wartości domyślne, ale nie umożliwiają etapowej aplikacji. Currying zapewnia prawdziwą częściową aplikację, zwracając rzeczywistą funkcję, którą można przekazywać dalej i ponownie wykorzystywać.
Szybkie sprawdzenie
Szybkie sprawdzenie tej lekcji.
Podsumowanie
Kurryfikacja przekształca f(a, b) w f(a)(b) — łańcuch funkcji jednoargumentowych typowanych jako zagnieżdżone strzałki. Aplikacja częściowa ustala następnie początkowe argumenty, tworząc wielokrotnie używane funkcje wyspecjalizowane, oparte na domknięciach.
Często zadawane pytania
Czy lekcja „Currying i częściowa aplikacja” jest bezpłatna?
Tak — pełny tekst „Currying i częściowa aplikacja” 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 TypeScript Academy, przejdź na CoddyKit PRO. Kurs TypeScript Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Currying i częściowa aplikacja”?
Przekształcaj funkcje wieloargumentowe w postacie curried Ćwiczysz TypeScript 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ąć TypeScript Academy?
Nie wymagamy żadnego doświadczenia. TypeScript 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 „Currying i częściowa aplikacja”?
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 TypeScript Academy?
Tak. Każda lekcja TypeScript 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
- Czyste funkcje i niezmienność
- Currying i częściowa aplikacja
- Kompozycja funkcji z typami
- Typowane narzędzia pipe i flow