Каррування проти часткового застосування
Partial application (часткове застосування) і currying (каррування) справді схожі - обидві техніки дозволяють частково передавати аргументи функції. Але між ними є чітка відмінність за суттю та метою.
1. Визначення
Каррування (Currying)
Перетворює функцію з n аргументами на ланцюжок функцій, кожна з яких приймає рівно один аргумент.
// Вихідна функція
function add(a, b, c) {
return a + b + c;
}
// Каррована версія
const curriedAdd = a => b => c => a + b + c;
curriedAdd(1)(2)(3); // 6Кожен виклик повертає нову функцію, яка очікує наступний аргумент. Каррування - це чисте функціональне перетворення сигнатури.
Часткове застосування (Partial Application)
Створює нову функцію із заздалегідь заданими (частково застосованими) аргументами, але не змінює кількість аргументів самої функції.
function add(a, b, c) {
return a + b + c;
}
// Частково застосовуємо перший аргумент
const add1 = add.bind(null, 1);
add1(2, 3); // 6Partial просто фіксує частину аргументів, а решту можна передати пізніше разом.
2. Головна відмінність
| Критерій | Currying | Partial Application |
|---|---|---|
| Що робить | Розбиває функцію на ланцюжок функцій по одному аргументу | Фіксує частину аргументів вихідної функції |
| Кількість аргументів за крок | 1 аргумент на кожен виклик | Кілька аргументів можна передати одразу |
| Повертає | Функцію, що очікує один наступний аргумент | Функцію, що очікує решту аргументів |
| Приклад виклику | f(a)(b)(c) | f(a, b)(c) або f(a)(b, c) |
| Мета | Уніфікація виклику та композиція | Повторне використання функції із заздалегідь заданими аргументами |
Приклад для наочності:
Каррування:
const multiply = a => b => c => a * b * c;
multiply(2)(3)(4); // 24Часткове застосування:
function multiply(a, b, c) {
return a * b * c;
}
const double = multiply.bind(null, 2); // фіксуємо a=2
double(3, 4); // 24Підсумок:
Currying - це формальне перетворення функції на послідовність викликів по одному аргументу. Partial Application - це практична техніка, щоб заздалегідь підставити частину аргументів, а решту передати пізніше.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.