Listar o uso de ponto duplo (.) No dardo?


141

As vezes eu vejo isso List list = [];

Então list..add(color)

Qual é a diferença no uso de 1 ponto ( .) e 2 pontos ( ..)?

Respostas:


242

..é conhecido como notação em cascata . Ele permite que você não repita o mesmo destino se desejar chamar vários métodos no mesmo objeto.

List list = [];
list.add(color1);
list.add(color2);
list.add(color3);
list.add(color4);

// with cascade

List list = [];
list
  ..add(color1)
  ..add(color2)
  ..add(color3)
  ..add(color4);

76

É o operador em cascata da Dart

var l1 = new List<int>()..add(0)..addAll([1, 2, 3]);

resulta em l1ser uma lista[0, 1, 2, 3]

var l1 = new List<int>().add(0).addAll([1, 2, 3]);

resulta em um erro, porque .add(0)retornavoid

..(no exemplo anterior) refere-se a new List(), enquanto .(no posterior) refere-se ao valor de retorno da parte anterior da expressão.

..foi introduzido para evitar a necessidade de retornar thisem todos os tipos de métodos, como add()poder usar uma API de maneira fluente.

.. fornece isso imediatamente para todas as classes.


Referindo-se .. (in former example) refers to new List(), você quer dizer que estamos novamente criando um novo Listquando estamos usando ..na minha opinião NÃO. Fiquei confuso com a sua newpalavra, é realmente NOVO ou você está falando sobre newpalavras-chave aqui.
CopsOnRoad

Primeiro newagora é opcional. ..refere-se à lista retornada por new List<int>()e permite chamar vários métodos nela, add(0) addAll(...)sem repetir, l1.e é a instância da lista criada à qual é atribuída l1, e não o valor de retorno do último método na cadeia ( addAll(...)). Isso responde sua pergunta?
Günter Zöchbauer

1
Absolutamente! Eu sei que newé opcional a partir do Dart 2.0, fiquei confuso com o newcontexto acima e obrigado pela sua explicação.
CopsOnRoad

1
..add(6)é como l1.add(6), .add(6)é como l1.add(5).add(6). add(5)retornos voide você não pode chamar add()onvoid
Günter Zöchbauer

2
siga este documento: - dartlang.org/guides/language/language-tour#cascade-notation- Estritamente falando, a notação de "ponto duplo" para cascatas não é um operador. É apenas parte da sintaxe do Dart.
Mr Special

17

Cascatas (..) permitem fazer uma sequência de operações no mesmo objeto. leia o documento para obter detalhes

querySelector('#confirm') // Get an object.
  ..text = 'Confirm' // Use its members.
  ..classes.add('important')
  ..onClick.listen((e) => window.alert('Confirmed!'));

O exemplo anterior é equivalente a:

var button = querySelector('#confirm');
button.text = 'Confirm';
button.classes.add('important');
button.onClick.listen((e) => window.alert('Confirmed!'));

1
obrigado por este exemplo! alguma idéia por ..onClickque não se traduz em button.classes.onClick?
Bouke Versteegh 27/01

1

..É conhecido como o operador em cascata no dardo.

Ele permite que você use mais de uma operação subsequente:

Exemplos:

banerad..load()..show().

List coursename;
coursename..add("java")..add("flutter" )..add("dart");

Aqui está outro exemplo

Aqui está outro exemplo

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.