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