O operador spread, no Dart.

Thiago Magalhães
3 min readMar 6, 2023

--

O operador spread pode parecer bastante confuso quando estamos iniciando. Sendo assim, venho compartilhar um pouco do meu conhecimento sobre esse carinha, alguns exemplos práticos e como ele pode te ajudar =).

Falando especificamente do Dart, o operador spread é representado por três pontos consecutivos e é usado para, literalmente “espalhar” os elementos de uma lista ou mapa em outro objeto. Ele pode ser usado em vários contextos, como em listas, mapas, parâmetros de função e construtores. Além disso, o operador spread é muito útil para simplificar o código e torná-lo mais legível. Ele ajuda a evitar a criação de listas e mapas temporários e, consequentemente, a economizar memória.

Observação importante antes de prosseguirmos com exemplos práticos. No Dart existe um outro operador representado por dois pontos consecutivos “..” e nada tem haver com o operador spread. Ele é comumente conhecido como “cascade notation” ou “cascade operator” e é usado para encadear uma série de chamadas de método em um objeto. Prometo falar sobre ele em outra oportunidade.

Bom, então vou direto ao que realmente interessa, por a mão na massa com alguns exemplos comuns de uso do operador spread.

1. Concatenando duas ou mais listas:

O primeiro uso, e talvez o mais comum, é combinar várias listas em uma única lista usando o operador spread. Por exemplo, suponha que você tenha três listas:

var lista1 = [1, 2, 3];

var lista2 = [4, 5, 6];

var lista3 = [7, 8, 9];

Você pode combinar as três listas em uma única lista usando o spread da seguinte maneira:

var listaCombinada = […lista1, …lista2, …lista3];

O operador spread irá espalhar os elementos de cada lista na lista combinada resultante.

2. Adicionando um novo elemento a uma lista:

Outro caso comum é adicionar um novo elemento a uma lista existente usando o operador spread. Por exemplo, suponha que você tenha a seguinte lista:

var lista = [1, 2, 3];

Você pode adicionar um novo elemento, como o valor 4, à lista existente da seguinte maneira:

var novoElemento = 4;

lista = […lista, novoElemento];

Nesse caso, o operador spread irá espalhar os elementos da lista original e o novo elemento em uma nova lista, que será atribuída à variável lista. Legal né?!

3. Passando uma lista como argumento para uma função:

Também é possível passar os elementos de uma lista como argumentos para uma função usando o operador spread. Por exemplo, suponha que você tenha a seguinte função:

void minhaFuncao(int a, int b, int c) {

print(‘$a, $b, $c’);

}

Você pode passar os elementos de uma lista como argumentos para esta função da seguinte maneira:

var lista = [1, 2, 3];

minhaFuncao(…lista);

O operador spread irá espalhar os elementos da lista como argumentos separados para a função.

4. Clonando uma lista:

Outro caso de uso interessante é clonar uma lista existente em uma nova lista usando o operador spread. Por exemplo, suponha que você tenha a seguinte lista:

var listaOriginal = [1, 2, 3];

Você pode clonar esta lista em uma nova lista da seguinte maneira:

var listaClone = […listaOriginal];

O operador spread espalha os elementos da lista original em uma nova lista, que será atribuída à variável listaClone.

5. Unindo duas ou mais coleções de objetos em uma única coleção:

E para finalizar , mas não menos importante, você pode combinar várias coleções de objetos em uma única coleção usando, adivinha?!, o operador spread. Por exemplo, suponha que você tenha dois sets e dois maps:

var set1 = {‘a’, ‘b’, ‘c’};

var set2 = {‘c’, ‘d’, ‘e’};

var map1 = {‘x’: 1, ‘y’: 2};

var map2 = {‘y’: 3, ‘z’: 4};

Você pode combinar essas coleções de objetos em uma única coleção usando o operador spread da seguinte maneira:

var setCombinado = {…set1, …set2};

var mapCombinado = {…map1, …map2};

O operador spread irá espalhar os elementos de cada Set e de cada Map na coleção combinada resultante. Observe que, se houver chaves duplicadas em mapas diferentes, o valor da última ocorrência de cada chave será mantido na coleção combinada.

Como vocês puderam vê nesses pequenos exemplos simples e práticos, o operador spread é uma maneira útil de trabalhar com várias coleções de objetos em Dart, nos ajudando a escrever códigos mais limpo e legível, além de ser muito divertido de utilizar ^__^.

Espero que tenham gostado. Da próxima falarei sobre o operador “cascade notation” ou “cascade operator”.

“This Is the Way”

--

--

Thiago Magalhães

Curious mobile developer, passionate about the sea, nature, minimalism and geek culture