Memoização
Em aplicações reais, funções caras (como cálculos matemáticos ou consultas a APIs) podem ser chamadas repetidamente com os mesmos argumentos. A memoização evita refazer o trabalho, armazenando resultados anteriores num cache. Isso melhora performance e respostas mais rápidas — essencial em processamento de dados, jogos ou renderização de componentes.
O PROBLEMA
Crie memoizar(fn) que recebe uma função e retorna versão com cache.
EXEMPLO
const calcMemo = memoizar(calcLento); calcMemo(5) → 25 calcMemo(5) → "do cache!" → 25
SOBRE O CONCEITO
A memoização usa closures para manter um objeto cache privado que persiste entre chamadas. Ao invocar a função memoizada, você gera uma chave a partir dos argumentos (com ...rest) e verifica se o resultado já está no cache. Se sim, retorna o valor armazenado; senão, executa a função original, guarda o resultado e o retorna. Erro comum é o cache não persistir — isso acontece quando a variável cache é recriada a cada chamada, geralmente por estar dentro da função retornada sem closure. Outro erro é chave incorreta: usar apenas o primeiro argumento ou converter mal os argumentos. A solução é usar JSON.stringify nos argumentos ou concatená-los com um separador. Com ...rest, você captura todos os parâmetros como array e os serializa para chave única.
RESOLUÇÃO