有时候我会看到这一点
List list = [];
然后list..add(color)
使用1点(.
)和2点(..
)的区别是什么?
答案 0 :(得分:68)
..
被称为cascade notation。如果要在同一对象上调用多个方法,它允许您不重复相同的目标。
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);
答案 1 :(得分:29)
这是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。
..
为所有课程提供了开箱即用的功能。
答案 2 :(得分:3)
级联(..)允许您对同一对象执行一系列操作。 read doc for details
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!'));
答案 3 :(得分:2)
..
在飞镖中称为级联运算符。
它允许您使用多个子序列操作:
示例:
banerad..load()..show().
List coursename;
coursename..add("java")..add("flutter" )..add("dart");
这是另一个例子
答案 4 :(得分:1)
Dart中的级联由于Dart开发人员大量使用方法链接,因此提供了层叠功能来支持。
请参见以下代码:
class Calculator {
double _accumulator = 0;
Calculator(double startValue) {
this._accumulator = startValue;
}
void add(double val) {
this._accumulator += val;
}
void subtract(double val) {
this._accumulator -= val;
}
double result() {
return this._accumulator;
}
}
它与ChainCalculator
类几乎相同;仅有一个区别,其中每种方法中的return this
已被删除。
让我们使用级联功能。
Calculator calculator = Calculator(0.0)
..add(12.0)
..subtract(10.0)
..add(5.0)..subtract(8.0);
print("Result: " + calculator.result().toString());
它的工作原理非常完美,并且与以前的代码类似,但是级联使用.
(双点)表示法来代替..
表示法,以便访问当前的修改实例。
为什么要在Dart中级联?
一般而言,级联对于以下方面非常有帮助:
构建复杂的对象(很多属性配置) 使对象更易于封装。
return this
使对象太开放。 嵌套级联可以更快地构建对象。 更少的代码行。