Memoization com JavaScript: Direto ao ponto
Memoização com JavaScript de uma forma fácil de entender, rápida e direto ao ponto.
Existem muitos artigos na internet sobre tal conceito, porém muitas vezes, ficamos confusos com sua aplicação. Neste artigo vou mostrar o que é, como aplicar e caso de uso.
Introdução
Memoization, em sua definição, é uma técnica de otimização de código, feito para funções puras, ou seja, funções que dado os mesmos parâmetros, o resultado sempre será o mesmo. Ele se dá na aplicação de um cache com base nos parâmetros e retornos para que sempre que os parâmetros forem iguais, retornar direto o valor do cache, economizando processamento.
Para exemplificar melhor a aplicação do pattern, primeiro as explicações sobre funções puras e funções não puras.
Exemplo de função pura:
No exemplo acima, podemos perceber que sempre que eu passar parâmetros iguais, o resultado vai ser o mesmo, afinal, 2 + 2 sempre vai ser 4. O que determina uma função como pura, é justamente isso.
Exemplo de função não pura:
Observe que o new Date().getTime(), nunca será o mesmo, logo, se eu chamar duas vezes essa função em um certo espaço de tempo, nunca será o mesmo retorno, mesmo que o parâmetro que eu passar sempre for o mesmo.
A função getTime() do objeto Date do JavaScript retorna o timestamp atual
Agora que você sabe o que é uma função pura e uma função não pura, passaremos para a aplicação do pattern.
Implementação em JavaScript puro
Agora iremos ver na prática como é a implementação do pattern com o JavaScript puro, sem utilizar nenhum tipo de dependência externa.
Repare que na linha 27 “configuramos” o memoizer para a função somarNumeros, pois assim mantemos a mesma instância da variável cache, da linha 4.
Conclusão
Este pattern é muito utilizado para funções pesadíssimas tanto do front quanto no back-end, e o melhor que ele não está restrito ao JavaScript, podendo ser aplicado em várias linguagens como PHP e Java.
Se você chegou até aqui, obrigado e até a próxima!
Se puder deixar alguns claps, eu ficaria muito grato! ❤