Memoization com JavaScript: Direto ao ponto

Márcio Lucas R Oliveira
Training Center
Published in
2 min readApr 13, 2021

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! ❤

--

--