Dartta çift nokta (.) Kullanımını listeleyin?


143

Bazen bunu görüyorum List list = [];

Sonra list..add(color)

1 nokta ( .) ve 2 nokta ( ..) kullanmanın farkı nedir?

Yanıtlar:


245

..basamaklı gösterim olarak bilinir . Aynı nesne üzerinde birkaç yöntem çağırmak istiyorsanız, aynı hedefi tekrarlamamanıza izin verir.

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

Dart'ın kademeli operatörü

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

l1liste olmakla sonuçlanır[0, 1, 2, 3]

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

bir hatayla sonuçlanır, çünkü .add(0)dönervoid

..(önceki örnekte) , ifadenin önceki bölümünün dönüş değerini ifade new List()ederken .(daha sonra) ifade eder.

..API'yi akıcı bir şekilde kullanabilmek thisgibi her türlü yönteme geri dönme ihtiyacını ortadan kaldırmak için geliştirilmiştir add().

.. bunu tüm sınıflar için kutunun dışında sağlar.


Referans olarak .. (in former example) refers to new List(), benim görüşüme göre HAYIR Listkullandığımızda tekrar yeni bir tane yarattığımızı mı söylüyorsunuz? ..Sözünüzle kafam karıştı new, gerçekten YENİ mü yoksa newburada anahtar kelimeden mi bahsediyorsunuz ?
CopsOnRoad

İlki newartık isteğe bağlıdır. ..tarafından döndürülen listesine değinmektedir new List<int>()ve benzeri üzerinde birden fazla yöntem dönmesini sağlar add(0) addAll(...)tekrarlamadan l1.ve atanan oluşturulan listesi örneği l1, değil zincirindeki son yöntemin dönüş değeri ( addAll(...)). Bu sorunuzu yanıtlıyor mu?
Günter Zöchbauer

1
Kesinlikle! newDart 2.0 ile başlayan isteğe bağlı olduğunu biliyorum , sadece newyukarıdaki bağlamda kafam karıştı ve açıklamanız için teşekkürler.
CopsOnRoad

1
..add(6)gibi l1.add(6), .add(6)gibidir l1.add(5).add(6). add(5)döner voidve diyemezsin add()üzerindevoid
Günter Zochbauer

2
bu belgeyi takip edin: - dartlang.org/guides/language/language-tour#cascade-notation- Açıkça söylemek gerekirse, kademeler için "çift nokta" gösterimi bir operatör değildir. Dart sözdiziminin bir parçasıdır.
Bay Özel

19

Basamaklı (..) aynı nesne üzerinde bir dizi işlem yapmanıza izin verir. ayrıntılar için belgeyi okuyun

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

Önceki örnek şuna eşdeğerdir:

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

1
bu örnek için teşekkürler! herhangi bir fikriniz neden ..onClicktercüme edilmiyor button.classes.onClick?
Bouke Versteegh

Örneklerinizde ödevleri kullandığınız için teşekkür ederiz. Dart'ta yeni olduğum için, çift nokta notasyonu hakkında biraz okudum, ancak bunun sadece boşluk yöntemlerini zincirlemek için olduğunu düşündüm.
Keith DC

1

..Dartta basamaklı operatör olarak bilinir .

Birden fazla alt dizi işlemi kullanmanıza izin verir:

Örnekler:

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

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

İşte başka bir örnek

İşte başka bir örnek

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.