Іноді я це бачу
List list = [];
Тоді list..add(color)
Яка різниця у використанні 1 крапки ( .
) та 2 крапки ( ..
)?
Іноді я це бачу
List list = [];
Тоді list..add(color)
Яка різниця у використанні 1 крапки ( .
) та 2 крапки ( ..
)?
Відповіді:
..
відомий як каскадні позначення . Це дозволяє не повторювати одну і ту ж ціль, якщо ви хочете викликати кілька методів на одному об'єкті.
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);
Це каскадний оператор 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.
..
надає це з вікна для всіх класів.
new
тепер необов’язково. ..
посилається на список, повернутий new List<int>()
і дозволяє викликати кілька методів по ньому, як add(0)
addAll(...)
без повторення, l1.
і саме створеному екземпляру списку призначається l1
, а не повернене значення останнього методу в ланцюжку ( addAll(...)
). Чи відповідає це на ваше запитання?
new
, що необов'язково починати з Dart 2.0, я просто заплутався new
в наведеному вище контексті і дякую за ваше пояснення.
..add(6)
схожий l1.add(6)
, .add(6)
схожий l1.add(5).add(6)
. add(5)
повертається , void
і ви не можете зателефонувати add()
поvoid
Каскади (..) дозволяють зробити послідовність операцій над тим самим об’єктом. читати 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!'));
..onClick
не перекладається button.classes.onClick
?
..
Відомий як каскадний оператор у дартсі.
Це дозволяє використовувати більше ніж одну операцію підпорядкування:
Приклади:
banerad..load()..show().
List coursename;
coursename..add("java")..add("flutter" )..add("dart");
Ось ще один приклад
.. (in former example) refers to new List()
, ви маєте на увазі, що ми знову створюємо нове,List
коли ми використовуємо,..
на мій погляд, НІ. Я заплутався у вашомуnew
слові, це дійсно НОВЕ або ви тут говорите проnew
ключове слово.