> Как упростить реализацию функции pipe, комбинирующей несколько функций в JavaScript? (JavaScript)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: Росбанк

Стек: JavaScript

> Пример ответа

Классический pipe можно реализовать через reduce - это самый лаконичный и читаемый способ:

JAVASCRIPT
const pipe = (...fns) => (x) => fns.reduce((acc, fn) => fn(acc), x);

Как это работает:
Функция принимает любое количество функций (...fns), возвращает новую функцию, которая принимает начальное значение x. Затем через reduce последовательно передаёт результат каждой функции в следующую.

Пример использования:

JAVASCRIPT
const add2 = (n) => n + 2;
const multiply3 = (n) => n * 3;
const toString = (n) => `Result: ${n}`;
const compute = pipe(add2, multiply3, toString);
console.log(compute(5)); // "Result: 21"

Упрощение для асинхронных функций (если нужен pipe с async/await):

JAVASCRIPT
const asyncPipe = (...fns) => (x) => fns.reduce((acc, fn) => acc.then(fn), Promise.resolve(x));

Почему это просто:

  • Используется встроенный reduce, не нужно писать циклы.
  • Функции передаются по цепочке, каждая получает результат предыдущей.
  • Код однострочный, легко читается и тестируется.

Для обратного порядка (слева направо - compose) достаточно заменить reduce на reduceRight.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью