Часткове застосування
Коротко: Часткове застосування (partial application) - це прийом, при якому функція викликається не з усіма аргументами одразу, а частина аргументів "запам'ятовується", і повертається нова функція, яка чекає на аргументи, що залишилися.
Детальне пояснення
Ідея: "зафіксувати" частину параметрів функції, щоб отримати нову, більш конкретну функцію.
На відміну від каррування, де функція приймає по одному аргументу, при частковому застосуванні можна передати одразу декілька.
Приклад 1 - проста реалізація
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:
function add(a, b, c) {
return a + b + c;
}
const add5 = add.bind(null, 5); // фіксуємо a = 5
console.log(add5(10, 20)); // 35bind створює нову функцію з уже підставленими аргументами.
Приклад 3 - універсальна функція partial
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) |
| Відмінність від каррування | Приймає кілька аргументів за раз |
| Користь | Повторне використання і спрощення коду |
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.