Композиция функций в JavaScript

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

Традиционный подход

Традиционно композиция функций следует этому формату:

 const double = x => x * 2const square = x => x * x//Традиционный подход var output1 = double (2); var output2 = square (output1); console.log (output2  );//два варианта output_final = square (double (2)); console.log (output_final); 

В приведенном выше коде мы видим, что нам нужно вызвать функция double , за которой следует функция square , чтобы возвести в квадрат термин, имеющий был удвоен. Мы можем сделать это, либо присвоив значения переменным по отдельности и вызывая для них функции (строки 4–5), либо мы можем использовать более прямой подход, как в строке 8.

Альтернативный подход

Другой подход — использовать функции compose и pipe .

compose function

compose function принимает любое количество функций и вызывает их все одну за другой:

// функциональная композиция любого количества функцийconst compose = (... fns) => x => fns.reduceRight ((y, f) => f (y), x);  const double = x => x * 2const square = x => x * x//композиция функции var output_final = compose (square, double) (2); console.log (output_final); 

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

pipe function

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

//композиция функции с использованием конвейера из любого количества функцийconst pipe = (... fns) => x => fns.reduce ((y, f) => f (y), x);  const double = x => x * 2const square = x => x * x//функция pipevar output_final = pipe (square, double) (2); console.log (output_final); 

В приведенном выше коде мы видим, что функция pipe реализован с использованием общего подхода в строке 2, поэтому теперь он может принимать любое количество функций. Это похоже на предыдущую функцию compose , за исключением того, что в ней используется reduce вместо метода reduceRight . В этом случае вывод отличается, потому что функция square вызывается перед функцией double , тогда как в нашем compose функция, это было в обратном порядке.

Библиотеки для композиции функций

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

  • Ramda: составить и передать
  • Lodash: flowRight (составить) и flow (pipe)

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

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