Каррирование функций — еще одна тема, которая иногда создает путаницу при первом прохождении.
В этом посте я расскажу о том, что такое каррирование и как мы можем реализовать его в JavaScript.

Что такое карри?

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

Это может сбивать с толку. Давайте проясним это с помощью примеров:

Если мы видим выше, add(1) on line 9возвращает функцию:

return function(b){  
    return function(c){   
        return a+b+c  
    } 
}

и res1(2) on line 10 тоже:

return function(c){   
    return a+b+c  
}

И теперь, поскольку указанная выше функция присутствует в res2, и когда мы ее вызываем: res2(3) on line 11, она выполняет расчет с полученными предыдущими аргументами:

a = 1 and b = 2

И теперь мы получаем вывод как: result: 6 on line 12.

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

Код выше можно переписать как:

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

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

Теперь, что, если мы хотим увеличить количество передаваемых параметров, то возврат n количества функций не будет возможным способом, поэтому мы можем переписать вышеприведенное код в общем виде, как показано ниже:

Если мы видим приведенный выше код, он также дает нам тот же результат.

В приведенном выше подходе мы видим, что в конце add(1)(2)(3)() on line 10 есть пустая скобка. Давайте посмотрим, почему:

Здесь мы возвращаем функцию, которая, в свою очередь, возвращает другую функцию для принятия следующего аргумента и так далее. Но мы останавливаем возврат функции, как только последний аргумент не существует (т.е. у нас есть пустая скобка), где condition on line 3 терпит неудачу и line 6 выполняется.

Каррирование — это одна из концепций, с которой разработчики JavaScript сталкиваются время от времени. И это также один из часто задаваемых вопросов на собеседованиях по JavaScript.

Бонусный совет!

Могут быть случаи, когда мы можем встретить термин: бесконечное каррирование. Итак, давайте посмотрим в коде, как это можно реализовать:

Здесь мы используем ту же логику, что и в предыдущем примере: currying-3.js, за исключением того, что здесь мы используем остальные параметры, которые помогают нам принимать все аргументы в виде массива и с которыми мы можем выполнять операция (сложение в нашем случае). А сложение здесь делается с помощью метода reduce().

Спасибо за прочтение!

Если вы нашли эту статью полезной, вы можете выразить свою признательность, нажав кнопку хлопка и оставив комментарий ниже!