Decorador
Em sistemas reais, é comum querer adicionar funcionalidades como logging, cache ou medição de tempo a funções existentes sem alterar seu código interno. O padrão decorator permite empacotar uma função com comportamento extra, mantendo sua assinatura original. É amplamente usado em frameworks como Express (middleware) e em bibliotecas de monitoramento.
O PROBLEMA
Crie decorador cronometrar(fn) que mede o tempo de execução de qualquer função.
EXEMPLO
const calcLenta = cronometrar(calc); calcLenta(1000) → "Executado em 2ms" → resultado
SOBRE O CONCEITO
O decorador cronometrar é uma função de alta ordem que recebe fn e retorna uma nova função. Essa nova função deve usar ...rest para capturar todos os argumentos passados e repassá-los à função original com fn(...rest). Um erro comum é não usar ...rest, o que quebra a passagem de argumentos. Outro erro é não retornar o resultado de fn(...rest), fazendo a função decorada devolver undefined. Além disso, dentro do decorador, usamos Date.now() para medir o tempo antes e depois da chamada, calculando a diferença. O padrão decorator é flexível e evita modificar funções existentes, permitindo composição de comportamentos.
RESOLUÇÃO