Explorando ES6: Map e WeakMap

Neste post, irei resumidamente falar um pouco sobre Map e WeakMap, que são novas coleções que entraram no EcmaScript 6.

Map

Map é uma coleção de dados de chave e valor, onde sua chave é única na coleção, podendo haver um valor associado à ela. Os valores dentro de um mapa podem se repetir.

Mapas nos permitem:

  • Adicionar elementos pelo par, chave e valor;
  • Buscar elementos através da chave;
  • Descobrir se um elemento pertence ou não àquela coleção através da chave;
  • Remover elementos através da chave.

No JavaScript, objetos e mapas são extremamente parecidos, pois ambos são baseados em chave e valor, sendo que a chave é o nome do atributo e o valor podendo ser objetos, funções e expressões.

maps e objects em js

Métodos de Map

  • set()

É possível incluir qualquer tipo de valor como chave ou valor em um mapa em JavaScript, podendo ser valores primitivos, objetos ou funções.

Para adicionar elementos em um mapa, utilizamos o método set().

  • size()

Para sabermos o tamanho do mapa com seus elementos, utilizamos o método size()

  • has()

Podemos também descobrir se uma determinada chave já existe associada a algum valor no mapa utilizando o método has(). Caso exista, o método retorna true, caso contrário, false.

  • delete()

Para removermos um elemento específico de um mapa, utilizamos o método delete(). Basta usarmos como parâmetro do método a chave do registro a ser removido.

Após a execução, você pode garantir que o elemento foi removido com sucesso utilizando o método has() novamente.

Map é um objeto iterável e com isso é possível utilizar o laço de repetição for .. of para iteração através dos métodos abaixo:

  • keys()

Exibe as chaves dos elementos de um mapa.

Saída:

saida_keys

  • values()

Exibe os valores dos elementos de um mapa.

Saída:

saida_values

  • entries()

Diferente dos métodos acima, o entries() lhe dá uma visão geral dos elementos de um mapa em formato de chave e valor.

Saída:

saida_entries

  • clear()

Por fim, caso seja necessário realizar a remoção de todos os elementos de um mapa, basta utilizar o método clear().

Para checarmos se os elementos foram removidos, podemos invocar o método size()

WeakMap

Assim como Map, o WeakMap é uma coleção de dados de chave e valor e sua diferença é que ele não permite que qualquer valor seja usado como chave de seus registros, e sim, apenas objetos.

Esses objetos, até então, não são fortemente mantidos e, portanto, caso não haja nenhuma outra referência a esses objetos, o Garbage Collector pode agir destruindo esses objetos inutilizáveis na memória, liberando, assim, espaço para novos processos.

Caso a referência local de um objeto já existente dentro de um WeakMap for removido, não será mais possível buscar seu valor através da chave.

Lembrando que não é possível adicionar outro valor como chave além de objetos. Caso haja uma tentativa, um erro é exibido no console.

Saída:

weak_map

Métodos de WeakMap

WeakMap não possui todos os métodos existentes em Map. Os métodos que há em comum entre as duas coleções são: has(), delete(), get() e set(). Todos aqui possuem o mesmo comportamento entre as duas coleções, ou seja, os comportamentos dos métodos em Map são os mesmos para WeakMap.

Como deve se perceber nos métodos acima, não temos a possibilidade de utilizarmos o método clear() para removermos todos os elementos de um WeakMap, nem mesmo temos uma visão geral da coleção com o método entries().

Para mais informações, exemplos e referências acesse: Map – MDN  / WeakMap – MDN

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

%d blogueiros gostam disto: