O operador spread, no Dart.
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”