Привет всем👋! Меня зовут Дхананджай Пант, и сегодня я хочу поговорить с вами об одной действительно интересной вещи в JavaScript, которая называется «каррирование». Каррирование может показаться сложным термином, но я обещаю вам, что это мощный и невероятно полезный метод, который может сделать ваш код более модульным и гибким.

Прежде чем перейти к техническим терминам, давайте попробуем понять это с помощью аналогии:

Думайте о карри в JavaScript, как о заказе пиццы с любимыми начинками. Обычно вы размещаете один заказ и сразу указываете все желаемые начинки. С карри это как если бы у вас был дружелюбный пиццер, который может добавлять только одну начинку за раз. Итак, вы размещаете первоначальный заказ на тесто для пиццы, затем просите производителя пиццы добавить сыр, затем соус, затем пепперони и так далее.

Каждый раз, когда вы добавляете начинку, производитель пиццы запоминает, что вы просили. Когда вы будете готовы и добавите все желаемые начинки, просто попросите пиццера испечь пиццу. Уууу! Вы получаете индивидуальную пиццу со всеми выбранными вами начинками.

«В JavaScript каррирование означает разбиение функции, которая обычно принимает все свои аргументы одновременно, на ряд функций, каждая из которых принимает только один аргумент. Эти меньшие функции запоминают то, что вы предоставили, и могут быть объединены позже для получения окончательного результата.».

Звучит сложно? Что ж, я надеюсь, что это станет понятным на этом примере, который я собираюсь показать ниже:

// Regular pizza making function
function makePizza(base, sauce, cheese, toppings) {
  return `Made a ${base} pizza with ${sauce} sauce, ${cheese} cheese, and ${toppings.join(', ')} toppings.`;
}

// Curry the pizza making function
function curryPizza(base) {
  return function (sauce) {
    return function (cheese) {
      return function (toppings) {
        return makePizza(base, sauce, cheese, toppings);
      };
    };
  };
}

// Create a custom pizza
const customPizza = curryPizza('thin crust')('tomato')('mozzarella')(['mushrooms', 'pepperoni']);

console.log(customPizza); // Output: "Made a thin crust pizza with tomato sauce, mozzarella cheese, and mushrooms, pepperoni toppings."

В этом примере карри позволяет шаг за шагом настраивать каждый аспект пиццы, точно так же, как добавляя начинки одну за другой.

Это все закрытие, которое делает это возможным. Просто чтобы убедиться, что вы действительно это понимаете, вот еще один очень простой пример, демонстрирующий силу каррирования.

function curryAdd(a) {
  return function (b) {
    return a + b; // The inner function forms a closure over 'a'.
  };
}

const addFive = curryAdd(5); // 'addFive' remembers that 'a' is 5.

console.log(addFive(3)); // Outputs: 8

РЕЗЮМЕ:Каррирование в JavaScript преобразует функцию с несколькими аргументами, например f(a, b,), в цепочку функций, которую можно вызвать как f(a)(b). Он поддерживает обычную возможность вызова функции и обеспечивает гибкость при постепенном применении аргументов.

Спасибо, что изучали карри вместе со мной. Если вы нашли это полезным, пожалуйста, поставьте лайк и поделитесь. Не стесняйтесь комментировать любые вопросы или отзывы. Оставайтесь любопытными, продолжайте программировать и подписывайтесь, чтобы получать больше информации. Приятного кодирования!