Czasami to widzę
List list = [];
Następnie list..add(color)
Jaka jest różnica w używaniu 1 kropki ( .
) i 2 kropek ( ..
)?
..
jest znany jako notacja kaskadowa . Pozwala nie powtarzać tego samego celu, jeśli chcesz wywołać kilka metod na tym samym obiekcie.
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);
To operator kaskady Darta
var l1 = new List<int>()..add(0)..addAll([1, 2, 3]);
powoduje, l1
że jest listą[0, 1, 2, 3]
var l1 = new List<int>().add(0).addAll([1, 2, 3]);
powoduje błąd, ponieważ .add(0)
zwracavoid
..
(w poprzednim przykładzie) odnosi się do new List()
, podczas gdy .
(w późniejszym) odnosi się do wartości zwracanej z poprzedniej części wyrażenia.
..
został wprowadzony, aby uniknąć konieczności powracania this
we wszelkiego rodzaju metodach, takich jak add()
płynne korzystanie z interfejsu API.
..
zapewnia to po wyjęciu z pudełka dla wszystkich klas.
.. (in former example) refers to new List()
, czy masz na myśli, że ponownie tworzymy nowy,List
kiedy używamy..
moim zdaniem NIE. Zmyliło mnie Twojenew
słowo, czy to naprawdę NOWE, czy też mówisznew
tutaj o słowie kluczowym.new
jest teraz opcjonalna...
odwołuje się do listy zwróconej przeznew List<int>()
i pozwala na wywołanie wielu metod na niejadd(0)
addAll(...)
bez powtarzanial1.
i to jest przypisana do utworzonej instancji listyl1
, a nie wartość zwracana przez ostatnią metodę w łańcuchu (addAll(...)
). Czy to odpowiada na twoje pytanie?new
jest to opcjonalne, począwszy od Dart 2.0, właśnie pomyliłem sięnew
w powyższym kontekście i dziękuję za wyjaśnienie...add(6)
jest jakl1.add(6)
,.add(6)
jest jakl1.add(5).add(6)
.add(5)
powracavoid
i nie można wywołaćadd()
navoid
querySelector('#confirm') // Get an object. ..text = 'Confirm' // Use its members. ..classes.add('important') ..onClick.listen((e) => window.alert('Confirmed!'));
Poprzedni przykład jest równoważny z:
var button = querySelector('#confirm'); button.text = 'Confirm'; button.classes.add('important'); button.onClick.listen((e) => window.alert('Confirmed!'));
źródło
..onClick
nie przekłada się nabutton.classes.onClick
?..
Jest znany jako operator kaskadowy w dart.Pozwala na użycie więcej niż jednej operacji podciągów:
Przykłady:
banerad..load()..show().
List coursename; coursename..add("java")..add("flutter" )..add("dart");
Oto kolejny przykład
źródło
Kaskada w Dart Ponieważ programiści Dart intensywnie wykorzystują łańcuchy metod, do obsługi dodano funkcję kaskadowania.
Zobacz poniższy kod:
class Calculator { double _accumulator = 0; Calculator(double startValue) { this._accumulator = startValue; } void add(double val) { this._accumulator += val; } void subtract(double val) { this._accumulator -= val; } double result() { return this._accumulator; } }
To prawie to samo, co
ChainCalculator
klasa; tylko jedna różnica, gdziereturn this
została usunięta w każdej metodzie.Użyjmy funkcji kaskady.
Calculator calculator = Calculator(0.0) ..add(12.0) ..subtract(10.0) ..add(5.0)..subtract(8.0); print("Result: " + calculator.result().toString());
Działa doskonale i podobnie jak poprzedni kod, ale zamiast
.
notacji kaskadowo używa notacji..
(z podwójną kropką) w celu uzyskania dostępu do bieżącej instancji modyfikującej.Dlaczego kaskada w Dart?
Ogólnie rzecz biorąc, kaskada jest bardzo pomocna w przypadku:
pochodzi z: Metoda łączenia łańcuchowego przy użyciu Cascade w Dart
źródło