0Pricing
JavaScript Academy · Lekcja

Częściowa aplikacja funkcji

Proszę ustalać niektóre argumenty i ponownie wykorzystywać funkcje.

Częściowa aplikacja funkcji to bezpłatna lekcja JavaScript Academy na CoddyKit. To lekcja 1 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 częściowa aplikacja

Częściowa aplikacja oznacza przyjęcie funkcji wymagającej kilku argumentów i ustalenie z wyprzedzeniem niektórych z nich, tworząc nową funkcję, która potrzebuje już tylko pozostałych.

Pozwala to tworzyć wyspecjalizowane funkcje na podstawie ogólnych. Ogólna funkcja multiply(a, b) może stać się wyspecjalizowaną funkcją double(b) przez ustalenie a = 2.

Funkcja z wieloma argumentami

Należy zacząć od funkcji ogólnego przeznaczenia. W tym przykładzie add przyjmuje trzy liczby. Często wywołuje się ją wielokrotnie z tym samym pierwszym argumentem.

function add(a, b, c) {
  return a + b + c;
}

console.log(add(1, 2, 3));
console.log(add(1, 10, 100));

Ręczne ustalanie argumentów

Najprostsza częściowa aplikacja to funkcja opakowująca, która na stałe określa jeden argument i przekazuje dalej pozostałe.

function add(a, b, c) {
  return a + b + c;
}

function addTen(b, c) {
  return add(10, b, c);
}

console.log(addTen(2, 3));
console.log(addTen(20, 30));

Częściowa aplikacja za pomocą bind

Function.prototype.bind służy właśnie do tego. Jego pierwszy argument ustawia this; każdy kolejny argument jest wstępnie uzupełniany od lewej strony.

Jeśli this nie ma znaczenia, należy przekazać wartość null.

function add(a, b, c) {
  return a + b + c;
}

const addTen = add.bind(null, 10);

console.log(addTen(2, 3));
console.log(addTen(20, 30));

Ustalanie więcej niż jednego argumentu

Można jednocześnie ustalić kilka początkowych argumentów. Zwrócona funkcja przyjmuje wszystkie pozostałe.

function add(a, b, c) {
  return a + b + c;
}

const addElevenAndTwo = add.bind(null, 11, 2);

console.log(addElevenAndTwo(7));
console.log(addElevenAndTwo(100));

Pomocnicza funkcja partial wielokrotnego użytku

Można napisać własną funkcję partial, która przechwytuje ustalone argumenty za pomocą parametru rest, a następnie łączy je z późniejszymi argumentami przy użyciu operatora spread.

function partial(fn, ...preset) {
  return function (...later) {
    return fn(...preset, ...later);
  };
}

function greet(greeting, name) {
  return greeting + ', ' + name + '!';
}

const sayHello = partial(greet, 'Hello');
console.log(sayHello('Ada'));
console.log(sayHello('Linus'));

Specjalizowanie funkcji ogólnych

Częściowa aplikacja szczególnie dobrze sprawdza się wtedy, gdy jedna funkcja ogólna tworzy wiele małych i czytelnych specjalizacji.

function multiply(a, b) {
  return a * b;
}

const double = multiply.bind(null, 2);
const triple = multiply.bind(null, 3);

console.log(double(5));
console.log(triple(5));

Częściowa aplikacja z tablicami

Wyspecjalizowane funkcje dobrze prezentują się wewnątrz metod tablic, takich jak map.

function power(exponent, base) {
  return Math.pow(base, exponent);
}

const square = power.bind(null, 2);

console.log([1, 2, 3, 4].map(square));

Wstępne uzupełnianie konfiguracji

Częstym zastosowaniem w praktyce jest ustalenie wartości konfiguracji, takiej jak stawka podatku lub symbol waluty, a następnie wielokrotne używanie tak przygotowanego wyniku.

function format(symbol, amount) {
  return symbol + amount.toFixed(2);
}

const usd = format.bind(null, '$');
const eur = format.bind(null, '\u20AC');

console.log(usd(9.5));
console.log(eur(9.5));

Częściowa aplikacja a parametry domyślne

Parametry domyślne zapewniają wartość zastępczą, gdy argument jest brakujący. Częściowa aplikacja ustala wartość, więc wywołujący nie może już jej zmienić dla danego miejsca.

Rozwiązują różne problemy: wartości domyślne są opcjonalne, a argumenty częściowo zaaplikowane — ustalone.

function log(level, message) {
  return '[' + level + '] ' + message;
}

const error = log.bind(null, 'ERROR');
console.log(error('Disk full'));
console.log(error('Timeout'));

Dlaczego częściowa aplikacja ma znaczenie

Częściowa aplikacja ogranicza powtarzanie kodu, jasno wyraża intencję i stanowi podstawę curryfikacji. Gdy ciągle przekazują Państwo ten sam pierwszy argument, warto rozważyć ustalenie go raz.

function between(min, max, value) {
  return value >= min && value <= max;
}

const isPercentage = between.bind(null, 0, 100);

console.log(isPercentage(50));
console.log(isPercentage(150));

Szybkie sprawdzenie

Co zwraca fn.bind(null, 5)?

Podsumowanie: częściowa aplikacja

Nauczyli się Państwo ustalać argumenty z wyprzedzeniem:

  • Ręczne funkcje opakowujące określają jeden argument na stałe i przekazują dalej pozostałe.
  • bind(null, ...args) wstępnie uzupełnia argumenty od lewej strony.
  • Własna funkcja pomocnicza partial korzysta z parametrów rest i operatora spread.
  • Częściowa aplikacja tworzy przejrzyste, wielokrotnego użytku specjalizacje i przygotowuje grunt pod curryfikację.

Często zadawane pytania

Czy lekcja „Częściowa aplikacja funkcji” jest bezpłatna?

Tak — pełny tekst „Częściowa aplikacja 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 „Częściowa aplikacja funkcji”?

Proszę ustalać niektóre argumenty i ponownie wykorzystywać funkcje. Ć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 1 z 4.

Ile czasu zajmuje lekcja „Częściowa aplikacja 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

  1. Częściowa aplikacja funkcji
  2. Kariowanie funkcji
  3. Kompozycja funkcji
  4. Tworzenie pipe i compose
← Powrót do JavaScript Academy