Пусть нам даны функции, принимающие один аргумент:
const double = x => x * 2; const cube = x => x ** 3; const inc = x => x + 1;
Допустим, мы часто выполняем какую-то операцию, требующую последовательного выполнения этих функций.
const res0 = double(cube(inc(0))); // 2 const res1 = double(cube(inc(1))); // 16 const res2 = double(cube(inc(2))); // 54
Функция compose
позволяет создать функцию, которая позволяет зафиксировать последовательность
этих действий и выполнять ее для разных аргументов.
const foo = compose(double, cube, inc); console.log(foo(0)); // 2 console.log(foo(1)); // 16 console.log(foo(2)); // 54
Мы можем работать не только с функциями, принимающими и возвращающими числа.
const fill = x => Array(3).fill(x); const repeat = x => x.repeat(5); const last = arr => arr.at(-1); const foo = compose(fill, repeat, last); console.log(foo(["a", "b", "c"])); // ["ccccc", "ccccc", "ccccc"]
Для пустого набора аргументов compose
возвращает функцию identity, которая возвращает свой
аргумент:
const foo = compose(); console.log(foo("a")); // "a" console.log(foo(5)); // 5