Fala Amigos!
Dando continuidade a nossa série sobre as novidades do Javascript, vamos falar hoje sobre collections.
Sets e Maps
Historicamente a única collection que vinha por padrão no Javascript era o Array. Mas a partir do ES6 temos novos tipos como: Set, WeakSet, Map e WeakMap.
Set
Para quem tem conhecimento em linguagens de programação como C#, Java, Ruby e Python esta collection não é uma novidade, mas para quem tem conhecimento somente em Javascript, sim. Sendo assim, segue a definição:
Set é um tipo de collection que permite a inserção de qualquer tipo de valor (Ex: objeto, function, número, string, etc) e não permite valores duplicados. Outra particularidade é que utilizando Set não é possível acessar um valor diretamente como é feito com Array, normalmente você valida para ver se o valor está presente ou itera sobre os valores.
Um exemplo de uso para Sets é uma lista de pedidos onde cada pedido do usuário deve ser único e ocasionalmente é necessário verificar se aquele pedido já esta incluso.
Simples!? Vamos ver na prática a utilização do Set:
//inicialização de um Set
var set = new Set(); //cria um novo Set vazio
var set2 = new Set([1, 2, 3]); //cria um novo Set a partir de um Array
set.add(1); //adiciona um valor
//número de valores no set
set.size; // 1
set2.size; // 3
//verifica se o valor existe dentro do Set
set.has(1); // true
set.add(1); //adiciona um valor duplicado e nada acontece
set.size; // 1
set.delete(1); //remove um determinado valor do Set
set.has(1); // false
set.size; // 0
//itera sobre os valores do Set
for (let valor of set2) {
console.log(valor);
}
//itera sobre os valores do Set
set2.forEach(function(valor) {
console.log(valor);
});
//output das iterações:
// 1
// 2
// 3
set2.clear(); //remove todos os valores do Set
set2.size; // 0
WeakSet
É um Set de objetos que não previne que seus elementos/valores sejam coletados pelo garbage collector do Javascript. Além disso a sua api também é reduzida. Deste modo, não é permitido iterar sobre os valores do Set e/ou limpar os mesmos usando o método clear.
Na prática, ao utilizar um objeto como valor do seu WeakSet e o mesmo não estiver sendo usado em mais nenhum lugar na sua aplicação, o garbage collector poderá limpar a sua referência e com isso magicamente o valor deixaria de existir.
A api do WeakSet é composta de apenas 3 métodos quais funcionam da mesma forma que o Set:
- add(valor)
- has(valor)
- delete(valor)
No próximo post falaremos de Map e WeakMap.
Até a próxima!