¿Enumerar el uso de doble punto (.) En dardo?

141

A veces veo esto List list = [];

Luego list..add(color)

¿Cuál es la diferencia al usar 1 punto ( .) y 2 puntos ( ..)?

Daniel Mana
fuente

Respuestas:

242

..se conoce como notación en cascada . Le permite no repetir el mismo objetivo si desea llamar a varios métodos en el mismo 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);
Alexandre Ardhuin
fuente
77

Es el operador en cascada de Dart

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

resulta en l1ser una lista[0, 1, 2, 3]

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

da como resultado un error, porque .add(0)devuelvevoid

..(en el ejemplo anterior) se refiere new List(), mientras que .(en el segundo) se refiere al valor de retorno de la parte anterior de la expresión.

..se introdujo para evitar la necesidad de regresar thisen todo tipo de métodos, como add()poder usar una API de manera fluida.

.. proporciona esto fuera de la caja para todas las clases.

Günter Zöchbauer
fuente
En referencia .. (in former example) refers to new List(), ¿quiere decir que estamos creando una nueva Listcuando estamos usando ..NO en mi opinión? Tu newpalabra me confundió , ¿es realmente NUEVO o estás hablando de newpalabras clave aquí?
CopsOnRoad
Primero newes ahora opcional. ..se refiere a la lista devuelta por new List<int>()y permite invocar múltiples métodos como si add(0) addAll(...)no se repitiera, l1.y es la instancia de lista creada a la que se asigna l1, no el valor de retorno del último método en la cadena ( addAll(...)). ¿Responde esto a tu pregunta?
Günter Zöchbauer
1
¡Absolutamente! Sé que newes opcional comenzando con Dart 2.0, acabo de confundirme con el newcontexto anterior y gracias por su explicación.
CopsOnRoad
1
..add(6)es como l1.add(6), .add(6)es como l1.add(5).add(6). add(5)retornos voidy no se puede llamar add()envoid
Günter Zöchbauer
2
siga este documento: - dartlang.org/guides/language/language-tour#cascade-notation- En sentido estricto, la notación de "doble punto" para cascadas no es un operador. Es solo parte de la sintaxis de Dart.
Sr. Especial
17

Las cascadas (..) le permiten realizar una secuencia de operaciones en el mismo objeto. lea el documento para más detalles

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

El ejemplo anterior es equivalente a:

var button = querySelector('#confirm');
button.text = 'Confirm';
button.classes.add('important');
button.onClick.listen((e) => window.alert('Confirmed!'));
mo sean
fuente
1
gracias por este ejemplo! alguna idea de por qué ..onClickno se traduce a button.classes.onClick?
Bouke Versteegh
1

..Se conoce como el operador en cascada en dardo.

Le permite utilizar más de una operación de subsecuencia:

Ejemplos:

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

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

Aquí hay otro ejemplo

Aquí hay otro ejemplo

Raushan Jha
fuente