Примеры использования каррирования и частичного применения
Каррирование и частичное применение – это два очень мощных концепта в функциональном программировании, которые могут значительно упростить работу с функциями в JavaScript. Давайте рассмотрим каждую концепцию и приведем примеры.
Каррирование
Каррирование (currying) – это техника, при которой функция с несколькими аргументами преобразуется в последовательность функций, каждая из которых принимает один аргумент. Это позволяет создавать новые функции с частично примененными аргументами.
Пример каррирования
Рассмотрим функцию, которая складывает три числа:
function add(a, b, c) {
    return a + b + c;
}
Теперь давайте превратим эту функцию в курируемую версию:
function curriedAdd(a) {
    return function(b) {
        return function(c) {
            return a + b + c;
        };
    };
}
// Использование
const add5 = curriedAdd(5);      // Теперь функция ожидает b
const add5And3 = add5(3);        // Теперь функция ожидает c
const result = add5And3(2);      // Результат: 10 (5 + 3 + 2)
console.log(result);
Частичное применение
Частичное применение (partial application) позволяет создавать новую функцию, фиксируя некоторые аргументы исходной функции. Это отличается от каррирования тем, что новая функция может принимать более одного аргумента, в отличие от каррированного подхода.
Пример частичного применения
Используем ту же функцию сложения:
function add(a, b, c) {
    return a + b + c;
}
// Функция для частичного применения
function partial(fn, ...args) {
    return function(...newArgs) {
        return fn(...args, ...newArgs);
    };
}
// Использование
const add5 = partial(add, 5);    // Теперь функция ожидает b и c
const result = add5(3, 2);       // Результат: 10 (5 + 3 + 2)
console.log(result);
Заключение
Обе техники – каррирование и частичное применение – позволяют создавать более компактный и повторно используемый код. Они помогают не только в процессе разработки, но и улучшают читаемость и поддержку проекта, особенно в больших приложениях. Новички в JavaScript могут использовать эти концепции для улучшения своих навыков программирования и создания более функционального стиля кода.