Каковы отличия между каррированием и частичным применением?
Каррирование и частичное применение — это две техники работы с функциями в JavaScript, которые помогают эффективно управлять аргументами и ними тащить функции. Хотя они похожи, между ними есть важные различия.
1. Каррирование (Currying)
Каррирование — это процесс преобразования функции, принимающей несколько аргументов, в последовательность функций, каждая из которых принимает один аргумент. При каррировании вы поэтапно передаете аргументы.
Пример каррирования
function sum(a) {
return function(b) {
return a + b;
};
}
const add5 = sum(5); // Функция, которая добавляет 5
console.log(add5(3)); // 8
console.log(add5(10)); // 15
В этом примере функция sum
принимает один аргумент a
и возвращает другую функцию, которая принимает аргумент b
. В результате мы можем создавать новую функцию add5
, которая всегда добавляет 5 к переданному значению.
2. Частичное применение (Partial Application)
Частичное применение позволяет фиксировать одно или несколько аргументов функции, создавая новую функцию с меньшим числом аргументов. В отличие от каррирования, частичное применение может использоваться для функций, принимающих несколько аргументов одновременно.
Пример частичного применения
function multiply(a, b) {
return a * b;
}
function partial(fn, ...fixedArgs) {
return function(...newArgs) {
return fn(...fixedArgs, ...newArgs);
};
}
const double = partial(multiply, 2); // Фиксируем первый аргумент
console.log(double(5)); // 10
console.log(double(10)); // 20
В этом примере функция partial
создает новую функцию, которая фиксирует первый аргумент a
как 2, позволяя передавать второй аргумент b
.
Основные различия
- Каррирование всегда принимает один аргумент и возвращает функцию для следующего аргумента.
- Частичное применение может принимать несколько аргументов сразу и фиксировать значения.
- Каррирование полезно, когда вы хотите последовательно обрабатывать аргументы.
- Частичное применение удобно, когда вы хотите создать новую функцию с фиксированными значениями из уже существующей функции.
Заключение
Понимание различий между каррированием и частичным применением поможет вам более эффективно использовать функции в JavaScript. Эти техники работают в контексте функционального программирования и могут значительно упростить управление и повторное использование функций.