Skip to main content

Часткове застосування

Коротко: Часткове застосування (partial application) - це прийом, при якому функція викликається не з усіма аргументами одразу, а частина аргументів "запам'ятовується", і повертається нова функція, яка чекає на аргументи, що залишилися.


Детальне пояснення

Ідея: "зафіксувати" частину параметрів функції, щоб отримати нову, більш конкретну функцію.

На відміну від каррування, де функція приймає по одному аргументу, при частковому застосуванні можна передати одразу декілька.


Приклад 1 - проста реалізація

javascript
function multiply(a, b, c) { return a * b * c; } // Частково застосовуємо: фіксуємо a = 2 function partialMultiply(a) { return function(b, c) { return multiply(a, b, c); }; } const double = partialMultiply(2); console.log(double(3, 4)); // 24

Ми "зафіксували" перший аргумент (a = 2) і отримали нову функцію double.


Приклад 2 - з bind()

JavaScript вже дозволяє робити часткове застосування за допомогою Function.prototype.bind:

javascript
function add(a, b, c) { return a + b + c; } const add5 = add.bind(null, 5); // фіксуємо a = 5 console.log(add5(10, 20)); // 35

bind створює нову функцію з уже підставленими аргументами.


Приклад 3 - універсальна функція partial

javascript
function partial(fn, ...fixedArgs) { return (...remainingArgs) => fn(...fixedArgs, ...remainingArgs); } function greet(greeting, name) { return `${greeting}, ${name}!`; } const sayHi = partial(greet, 'Привіт'); console.log(sayHi('Alice')); // "Привіт, Alice!"

Відмінність від каррування

ПрийомЩо робить
КарруванняПеретворює функцію з кількома аргументами на ланцюг функцій по одному аргументу (f(a)(b)(c))
Часткове застосуванняПідставляє частину аргументів і повертає нову функцію (f(a, b, c) -> g(b, c))

Навіщо потрібне часткове застосування

Повторне використання функцій з різними контекстами Спрощення викликів і конфігурацій Підвищення читабельності Часто використовується у функціональному програмуванні, React і middleware


Підсумок

ВластивістьЧасткове застосування
Суть"Запам'ятовує" частину аргументів
ПовертаєНову функцію
Прикладadd.bind(null, 5) або partial(add, 5)
Відмінність від карруванняПриймає кілька аргументів за раз
КористьПовторне використання і спрощення коду

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.