Pipeline operator simulado
Em pipelines de dados reais (transformar texto, limpar entradas, processar listas), encadear funções sem aninhá-las torna o código mais legível e modular. O pipe é o padrão usado em bibliotecas como Lodash e RxJS para compor operações em sequência — dominá-lo evita callbacks aninhados e facilita a manutenção.
O PROBLEMA
Implemente pipe(...fns) que aplica funções da esquerda para direita. Crie pipeline de texto.
EXEMPLO
const processar = pipe(trim, toLowerCase, splitPalavras);
processar(" Olá ") → ["olá"]SOBRE O CONCEITO
O pipe aplica funções da esquerda para a direita: pipe(f, g)(x) equivale a g(f(x)). Já compose faz o oposto. O erro comum é inverter a ordem, achando que pipe(f, g) executa f(g(x)). Para implementar sem loops, use reduce sobre o array de funções, passando o resultado acumulado para a próxima. Com ...rest você captura todas as funções como array. Exemplo: const pipe = (...fns) => (x) => fns.reduce((acc, fn) => fn(acc), x);. Proibido usar for/while porque o objetivo é praticar redução funcional, que é mais declarativa e imutável.
RESOLUÇÃO