Collections ES6 – parte 1

Novas estruturas de dados do Javascript

por Bruno Belarmino 12/05/2015 Comentários

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, MapWeakMap.

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 MapWeakMap.

Até a próxima!