О, что это? Мы говорим о еде? 😱

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

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

Итак, давайте поговорим об их определении, прежде чем мы продолжим обсуждение «каррирования».

Что такое функция гражданина первого класса?

По сути, понятие гражданин первого класса — это особая трактовка функции. Что это значит? это возможность языка программирования определять функцию всякий раз, когда они хотят, исходя из своих целей. Например, функция может быть объявлена ​​как переменная, как параметр/аргумент или как возвращаемое значение. "[ссылка]"

Что такое функция высшего порядка?

Функция высшего порядка практически представляет собой функцию, которая содержит другую функцию в своем параметре/аргументе, ИЛИ функции, которые возвращают другую функция в качестве их результата. "[ссылка]"

На самом деле и функция гражданина первого класса, и функция более высокого порядка тесно связаны между собой. 😉

Чтобы было понятнее, давайте рассмотрим пример функции граждан первого класса и функции более высокого порядка в Javascript ниже.

Взгляните на приведенную выше функцию калькулятора. Параметр f — это функция, которая вызывается в калькуляторе(). Внутри самой функции калькулятора мы определяем переменную result для размещения f функции.

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

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

Другой пример использования функции высшего порядка в Javascript: определение функции как возвращаемого значения.

Теперь вернемся к теме, так что же такое «каррирование»?

карри

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

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

  • Суммарная функция, написанная без каррирования
  • Кроме того, суммируйте функции, но запишите с помощью каррирования

Обе функции также выполняются и имеют одинаковый результат, так в чем же преимущество использования каррирования?

Хорошо, давайте выясним, в чем польза от использования этой техники.

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

Используя calculateDiscount функцию выше, если мы хотим рассчитать 10% скидку от цены товара, мы напишем такой код:

На первый взгляд, в этом коде нет ничего плохого, и действительно, в этом нет ничего плохого. Но, если вы обратите внимание, нужно много итераций, чтобы написать параметр скидки (10). 😯

Что ж, если мы упростим эти коды с помощью «каррирования», это будет выглядеть так:

Результат тот же, но теперь нет итерации для параметра скидки.

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

Еще одним преимуществом использования «каррирования» является то, что наша функция станет более гибкой. Мы можем использовать calculateDiscount функцию для вычисления другого значения скидки, но используя ту же базовую функцию.

Например, чтобы рассчитать 20% скидку от цены товара, мы можем просто изменить первый параметр в объявлении переменной.

Заключение

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

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

Это часто помогает уменьшить дублирование кода и помогает в соблюдении принципа DRY (не повторяйся). Но я советую вам не слишком часто применять каррирование, потому что это затруднит чтение вашего кода.

Использовать его мудро..

Надеюсь, эта статья поможет удовлетворить ваше любопытство. 😉

Ресурсы: