Иногда я вижу это
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
Каскады (..) позволяют выполнять последовательность операций над одним и тем же объектом. подробности читайте в документе
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?
..В dart известен как каскадный оператор .
Это позволяет вам использовать более одной операции подпоследовательности:
Примеры:
banerad..load()..show().
List coursename;
coursename..add("java")..add("flutter" )..add("dart");
Вот еще один пример
.. (in former example) refers to new List(), вы имеете в виду, что мы снова создаем новый,Listкогда мы используем,..на мой взгляд, НЕТ. Меня смутило вашеnewслово, действительно ли оно НОВОЕ или вы здесь проnewключевое слово.