Как сделать compose() и pipe() в Javascript

Здравствуйте,
При создании сложной функциональности чаще всего возникает ситуация, когда нужно передать значение в функцию, а возвращаемое значение (результат) является необходимым входом для другой функции. Это может показаться нормальным, если у вас 2 — 3 функции, но когда у вас больше, чем нужно, ваш код становится беспорядочным и нечитабельным. Чтобы решить эту проблему, на помощь приходит композиция функций.

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

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

Композиция

Передача функций в порядке справа налево для выполнения. Пример (f4,f3,f2,f1 )

//Compose function using reduceRight()
const compose = (...args) => (value) => args.reduceRight((prev, fn) => fn(prev), value);
// Increment the passed value by 2
const increment = (n) => n + 2;
// Triples the passed value
const double = (n) => n * 3;
//Divide it by 2
const divide = (n) => n / 2;
// Using our composition function
console.log(compose(divide, double, increment)(2));  // 6
Вход в полноэкранный режим Выход из полноэкранного режима

Pipe

Передача функций для выполнения в порядке слева направо. Пример (f1,f2,f3,f4 )

//pipe function using reduce(), default left to right execution
const pipe = (...args) => (value) => args.reduce((prev, fn) => fn(prev), value);
// Increment the passed value by 2
const increment = (n) => n + 2;
// Triples the passed value
const double = (n) => n * 3;
//Divide it by 2
const divide = (n) => n / 2;
// Using our pipe function
console.log(pipe(increment, double, divide)(3));  // 7.5
Вход в полноэкранный режим Выход из полноэкранного режима

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

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

Оцените статью
devanswers.ru
Добавить комментарий