Иногда я вижу это
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
ключевое слово.