Что такое каррирование в Javascript? Как использовать каррирование в JavaScript

Вот что вам нужно знать о каррировании в JavaScript.

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

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

Базовый пример каррирования

function buildSandwich(ingredient1) { return (ingredient2) => { return (ingredient3) => { return `${ingredient1},${ingredient2},${ingredient3}` } } }

buildSandwich() возвращает другую функцию — анонимную функцию, которая принимает аргумент Ingignent2. Затем эта функция возвращает другую анонимную функцию, которая принимает ингредиент3. Последняя функция возвращает строку шаблона — способ форматирования строк в JavaScript.

То, что вы только что создали, — это вложенная функция, где каждая функция будет вызывать функцию ниже нее, пока мы не закончим. Теперь, когда вы вызываете buildSandwich() и передаете ему один параметр, он возвращает ту часть функции, аргументы которой вы не предоставили:

console.log(buildSandwich(“Бекон”))

Вы можете видеть, что buildSandwich возвращает функцию:

Что такое каррирование в Javascript?  Как использовать каррирование в JavaScript. Рисунок 1.

Чтобы завершить вызов функции, вам необходимо предоставить все 3 аргумента:

buildSandwich(“Бекон”)(“Салат”)(“Помидор”)

Этот код передает «Бекон» в первую функцию, «Салат» во вторую и «Помидор» в последнюю функцию. Другими словами. Функция buildSandwich() фактически разделена на 3 функции, каждая из которых принимает только один параметр.

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

const buildMeal = ingred1 => ingred2 => ingred3 => `${ingred1}, ${ingred2}. ${ingred3}`;

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

buildMeal(“Бекон”)(“Салат”)(“Помидор”)

Функция карри применена частично

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

Например:

const умножить = (x, y) => x * y;

Ниже приведена каррированная версия умножения:

const curriedMultiply = x => y => x * y;

Функция curriedMultiply() принимает аргументы x для первой функции и y для второй функции, а затем умножает оба значения.

Чтобы создать первую частично примененную функцию, вызовите curriedMultiple() с первым параметром и присвойте возвращаемую функцию переменной:

const timesTen = curriedMultiply(10)

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

console.log(timesTen(8)) // 80

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

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

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *