Daftar penggunaan titik ganda (.) Di panah?

142

Terkadang saya melihat ini List list = [];

Kemudian list..add(color)

Apa perbedaan menggunakan 1 titik ( .) dan 2 titik ( ..)?

Daniel Mana
sumber

Jawaban:

243

..dikenal sebagai notasi kaskade . Ini memungkinkan Anda untuk tidak mengulangi target yang sama jika Anda ingin memanggil beberapa metode pada objek yang sama.

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
sumber
77

Ini operator kaskade Dart

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

hasil l1menjadi daftar[0, 1, 2, 3]

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

menghasilkan kesalahan, karena .add(0)kembalivoid

..(dalam contoh sebelumnya) merujuk ke new List(), sementara .(di kemudian) merujuk pada nilai pengembalian dari bagian sebelumnya dari ekspresi.

..diperkenalkan untuk menghindari kebutuhan untuk kembali thisdalam semua jenis metode seperti add()untuk dapat menggunakan API dengan lancar.

.. menyediakan ini di luar kotak untuk semua kelas.

Günter Zöchbauer
sumber
Mengacu .. (in former example) refers to new List(), maksud Anda, kami membuat lagi Listsaat kami menggunakan ..menurut saya TIDAK. Saya bingung dengan newkata - kata Anda , apakah ini benar-benar BARU atau Anda berbicara tentang newkata kunci di sini.
CopsOnRoad
Pertama newsekarang opsional. ..merujuk ke daftar yang dikembalikan oleh new List<int>()dan memungkinkan untuk memanggil beberapa metode di atasnya seperti add(0) addAll(...)tanpa mengulangi l1.dan itu adalah contoh daftar yang dibuat yang ditugaskan untuk l1, bukan nilai pengembalian metode terakhir dalam rantai ( addAll(...)). Apakah ini menjawab pertanyaan Anda?
Günter Zöchbauer
1
Benar! Saya tahu newadalah opsional dimulai dengan Dart 2.0, saya baru saja bingung dengan newkonteks di atas dan terima kasih atas penjelasan Anda.
CopsOnRoad
1
..add(6)seperti l1.add(6), .add(6)seperti l1.add(5).add(6). add(5)kembali voiddan Anda tidak dapat memanggil add()padavoid
Günter Zöchbauer
2
ikuti dokumen ini: - dartlang.org/guides/language/language-tour#cascade-notation- Sebenarnya, notasi "titik ganda" untuk kaskade bukanlah operator. Itu hanya bagian dari sintaks Dart.
Tuan Khusus
17

Cascades (..) memungkinkan Anda untuk membuat urutan operasi pada objek yang sama. baca dokumen untuk detailnya

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

Contoh sebelumnya setara dengan:

var button = querySelector('#confirm');
button.text = 'Confirm';
button.classes.add('important');
button.onClick.listen((e) => window.alert('Confirmed!'));
mo sean
sumber
1
terima kasih untuk contoh ini! ada ide mengapa ..onClicktidak diterjemahkan button.classes.onClick?
Bouke Versteegh
1

..Dikenal sebagai operator cascading di panah.

Ini memungkinkan Anda untuk menggunakan lebih dari satu operasi selanjutnya:

Contoh:

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

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

Ini adalah contoh lain

Ini adalah contoh lain

Raushan Jha
sumber