Wymień użycie podwójnej kropki (.) W rzutce?


163

Czasami to widzę List list = [];

Następnie list..add(color)

Jaka jest różnica w używaniu 1 kropki ( .) i 2 kropek ( ..)?

Odpowiedzi:


274

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

88

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 thiswe wszelkiego rodzaju metodach, takich jak add()płynne korzystanie z interfejsu API.

.. zapewnia to po wyjęciu z pudełka dla wszystkich klas.


Odnosząc się .. (in former example) refers to new List(), czy masz na myśli, że ponownie tworzymy nowy, Listkiedy używamy ..moim zdaniem NIE. Zmyliło mnie Twoje newsłowo, czy to naprawdę NOWE, czy też mówisz newtutaj o słowie kluczowym.
CopsOnRoad

Pierwsza newjest teraz opcjonalna. ..odwołuje się do listy zwróconej przez new List<int>()i pozwala na wywołanie wielu metod na niej add(0) addAll(...)bez powtarzania l1.i to jest przypisana do utworzonej instancji listy l1, a nie wartość zwracana przez ostatnią metodę w łańcuchu ( addAll(...)). Czy to odpowiada na twoje pytanie?
Günter Zöchbauer

1
Absolutnie! Wiem, że newjest to opcjonalne, począwszy od Dart 2.0, właśnie pomyliłem się neww powyższym kontekście i dziękuję za wyjaśnienie.
CopsOnRoad

1
..add(6)jest jak l1.add(6), .add(6)jest jak l1.add(5).add(6). add(5)powraca voidi nie można wywołać add()navoid
Günter Zochbauer

2
postępuj zgodnie z tym dokumentem: - dartlang.org/guides/language/language-tour#cascade-notation- Ściśle mówiąc, notacja „podwójnej kropki” dla kaskad nie jest operatorem. To tylko część składni Dart.
Mr Special

20

Kaskady (..) pozwalają na wykonanie sekwencji operacji na tym samym obiekcie. przeczytaj dokument, aby uzyskać szczegółowe informacje

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

1
dzięki za ten przykład! każdy pomysł, dlaczego ..onClicknie przekłada się na button.classes.onClick?
Bouke Versteegh

Dziękuję za wykorzystanie zadań w przykładach. Będąc nowym w Dart, czytałem trochę o notacji z podwójną kropką, ale pomyślałem, że to tylko do łączenia metod void.
Keith DC

2

..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

Oto kolejny przykład


0

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 ChainCalculatorklasa; tylko jedna różnica, gdzie return thiszostał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:

budowanie złożonych obiektów (wiele konfiguracji właściwości), dzięki czemu obiekty są lepsze do hermetyzacji. return thispowoduje, że obiekty są zbyt otwarte. budowanie obiektów szybciej dzięki zagnieżdżonej kaskadzie. mniej linii kodu.

pochodzi z: Metoda łączenia łańcuchowego przy użyciu Cascade w Dart

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.