Elencare l'uso del doppio punto (.) In dardo?


142

A volte vedo questo List list = [];

Poi list..add(color)

Qual è la differenza nell'uso di 1 punto ( .) e 2 punti (.. )?

Risposte:


243

..è noto come notazione a cascata . Ti consente di non ripetere lo stesso target se desideri chiamare più metodi sullo stesso oggetto.

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);

77

È l'operatore a cascata di Dart

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

risulta in l1un elenco[0, 1, 2, 3]

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

provoca un errore, perché .add(0) restituiscevoid

..(nell'esempio precedente) si riferisce a new List(), mentre. (nel seguito) si riferisce al valore restituito della parte precedente dell'espressione.

..è stato introdotto per evitare la necessità di tornare thisin tutti i tipi di metodi comeadd() essere in grado di utilizzare un'API in modo fluido.

.. fornisce questo pronto per tutte le classi.


Facendo riferimento .. (in former example) refers to new List(), vuoi dire che stiamo creando di nuovo un nuovo Listquando usiamo ..a mio avviso NO. Sono stato confuso dalla tua newparola, è davvero NUOVO o stai parlando di newparole chiave qui.
CopsOnRoad,

Il primo newè ora facoltativo. ..fa riferimento all'elenco restituito da new List<int>()e consente di richiamare più metodi come se add(0) addAll(...)non si ripetesse l1.ed è l'istanza dell'elenco creata a cui è assegnato l1, non il valore restituito dell'ultimo metodo nella catena ( addAll(...)). Questo risponde alla tua domanda?
Günter Zöchbauer,

1
Assolutamente! So che newè facoltativo a partire da Dart 2.0, sono appena stato confuso dal newcontesto sopra e grazie per la tua spiegazione.
CopsOnRoad,

1
..add(6)è come l1.add(6), .add(6)è come l1.add(5).add(6). add(5)ritornavoid e non è possibile chiamare add()ilvoid
Günter Zöchbauer

2
segui questo documento: - dartlang.org/guides/language/language-tour#cascade-notation- A rigor di termini, la notazione del “doppio punto” per le cascate non è un operatore. Fa solo parte della sintassi di Dart.
Speciale

17

Le cascate (..) consentono di eseguire una sequenza di operazioni sullo stesso oggetto. leggi doc per i dettagli

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

L'esempio precedente equivale a:

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

1
grazie per questo esempio! qualche idea sul perché ..onClicknon si traduca in button.classes.onClick?
Bouke Versteegh,

1

..È noto come l' operatore a cascata in dardo.

Ti consente di utilizzare più di un'operazione di sottosequenza:

Esempi:

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

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

Ecco un altro esempio

Ecco un altro esempio

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.