JS каррирование – принцип функционального программирования

Каррирование в JavaScript

Каррирование (currying) в JavaScript - это техника функционального программирования, которая позволяет превращать функции с несколькими аргументами в цепочку функций с одним аргументом. При использовании каррирования, функции принимают один аргумент и возвращают новую функцию, которая затем принимает следующий аргумент и так далее.

Каррирование позволяет нам создавать более гибкие и модульные функции, так как они могут быть частично применены и повторно использованы. Дополнительные аргументы могут быть переданы позже, что упрощает композицию функций и улучшает их читаемость.

Рассмотрим простой пример функции сложения двух чисел:


function add(a, b) {
  return a + b;
}

Чтобы применить каррирование к этой функции, мы можем использовать метод .bind():


const curriedAdd = add.bind(null, 5);
console.log(curriedAdd(3)); // Вывод: 8

Мы создали новую функцию curriedAdd, которая принимает только один аргумент b, а значение для a фиксировано на 5. Вызов curriedAdd(3) возвращает результат сложения 5 и 3, то есть 8.

Однако использование .bind() не всегда является удобным или элегантным. Здесь в игру вступает функциональное программирование и возможность написания кастомной функции каррирования.


function curry(fn) {
  return function curried(...args) {
    if (args.length >= fn.length) {
      return fn.apply(this, args);
    } else {
      return function(...args2) {
        return curried.apply(this, args.concat(args2));
      };
    }
  };
}

function add(a, b) {
  return a + b;
}

const curriedAdd = curry(add);
console.log(curriedAdd(5)(3)); // Вывод: 8

Мы создали функцию curry, которая принимает функцию fn в качестве аргумента. Возвращаемая функция curried принимает все переданные аргументы в виде массива args. Если количество переданных аргументов достаточно для вызова исходной функции fn, то функция apply применяется к fn с текущими аргументами. В противном случае создается новая функция, которая объединяет текущие аргументы args с дополнительными аргументами args2 и вызывает curried с новым списком аргументов.

Используя эту функцию, мы можем теперь каррировать функции любой сложности:


function multiply(a, b, c) {
  return a * b * c;
}

const curriedMultiply = curry(multiply);
console.log(curriedMultiply(2)(3)(4)); // Вывод: 24

Также, каррированные функции можно использовать для создания новых функций путем частичного применения аргументов:


const double = curriedMultiply(2);
console.log(double(5, 6)); // Вывод: 60

Таким образом, каррирование является мощным инструментом функционального программирования в JavaScript, который позволяет создавать гибкие и модульные функции. Каррированные функции упрощают композицию функций и повышают их читаемость, обеспечивая более гибкое использование аргументов.

Похожие вопросы на: "js каррирование "

Инициация проекта: Руководство по началу работы
Webhook Discord - Интеграция для автоматической отправки уведомлений
Тестовый сервер
ASIDE HTML: преимущества и правильное использование
Кросс-объединение SQL: что это такое и как использовать
Замена в Python
Округление чисел в PHP - функция round()
Пространство между: исследование понятия и его воздействия
Python JSON dump: работа с JSON в Python
Redis Python: работа с Redis с использованием языка Python