Список использования двойной точки (.) В дротике?
Иногда я вижу это
List list = [];
Тогда list..add(color)
В чем разница в использовании 1 точки (.
) и 2 точки (..
)?
Ответы
Ответ 1
..
известен как каскадная нотация. Это позволяет вам не повторять одну и ту же цель, если вы хотите вызвать несколько методов на одном и том же объекте.
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);
Ответ 2
Это каскадный оператор Дарта
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.
..
предоставляет это из коробки для всех классов.
Ответ 3
Должно ли это также работать правильно, когда объект, о котором идет речь (List
в примере OP), создается в том же самом выражении? Например:
Tween(begin: 0.0, end: 20.0).animate(controller)
..addListener(/* ... */)
Кажется, это не так, как ожидалось.