Перерахуйте використання подвійної крапки (.) У дартсі?


141

Іноді я це бачу List list = [];

Тоді list..add(color)

Яка різниця у використанні 1 крапки ( .) та 2 крапки ( ..)?

Відповіді:


242

..відомий як каскадні позначення . Це дозволяє не повторювати одну і ту ж ціль, якщо ви хочете викликати кілька методів на одному об'єкті.

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

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

призводить до l1того, що це список[0, 1, 2, 3]

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

призводить до помилки, оскільки .add(0)повертаєтьсяvoid

..(у першому прикладі) посилається на new List(), тоді як .(у пізнішому) посилається на повернене значення попередньої частини виразу.

..було введено, щоб уникнути необхідності повертатися thisу всілякі методи, як, наприклад, add()мати можливість вільно використовувати API.

.. надає це з вікна для всіх класів.


Звертаючись .. (in former example) refers to new List(), ви маєте на увазі, що ми знову створюємо нове, Listколи ми використовуємо, ..на мій погляд, НІ. Я заплутався у вашому newслові, це дійсно НОВЕ або ви тут говорите про newключове слово.
CopsOnRoad

Спочатку newтепер необов’язково. ..посилається на список, повернутий new List<int>()і дозволяє викликати кілька методів по ньому, як add(0) addAll(...)без повторення, l1.і саме створеному екземпляру списку призначається l1, а не повернене значення останнього методу в ланцюжку ( addAll(...)). Чи відповідає це на ваше запитання?
Гюнтер Зехбауер

1
Абсолютно! Я знаю new, що необов'язково починати з Dart 2.0, я просто заплутався newв наведеному вище контексті і дякую за ваше пояснення.
CopsOnRoad

1
..add(6)схожий l1.add(6), .add(6)схожий l1.add(5).add(6). add(5)повертається , voidі ви не можете зателефонувати add()поvoid
Гюнтер Zöchbauer

2
дотримуйтесь цього документа: - dartlang.org/guides/language/language-tour#cascade-notation- Строго кажучи, позначення "подвійної крапки" для каскадів не є оператором. Це просто частина синтаксису Dart.
Містер Спеціальний

17

Каскади (..) дозволяють зробити послідовність операцій над тим самим об’єктом. читати doc для детальної інформації

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

Попередній приклад еквівалентний:

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

1
дякую за цей приклад! будь-яка ідея, чому ..onClickне перекладається button.classes.onClick?
Bouke Versteegh

1

..Відомий як каскадний оператор у дартсі.

Це дозволяє використовувати більше ніж одну операцію підпорядкування:

Приклади:

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

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

Ось ще один приклад

Ось ще один приклад

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.