0Pricing
TypeScript Academy · Lekcja

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)); // 5

Typowanie 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)); // 15

Częś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 12

Dlaczego 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")); // foobar

Domknię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, Sam

Kiedy 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

  1. Czyste funkcje i niezmienność
  2. Currying i częściowa aplikacja
  3. Kompozycja funkcji z typami
  4. Typowane narzędzia pipe i flow
← Powrót do TypeScript Academy