Dart 列出双点(.)在省道中的用法?
有时候我看到这个Dart 列出双点(.)在省道中的用法?,dart,Dart,有时候我看到这个 List=[] 然后列表..添加(颜色) 使用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(c
List=[]代码>
然后列表..添加(颜色)
使用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]);
导致错误,因为.add(0)
返回void
。
(在前一个示例中)指的是新列表(),
而
(在后面的部分中)指的是表达式前一部分的返回值
。
的引入是为了避免在各种方法中返回this
,例如add()
,以便能够流畅地使用API
。
为所有类提供了这种开箱即用的功能
级联(..)允许您对同一对象执行一系列操作
前面的示例相当于:
var button = querySelector('#confirm');
button.text = 'Confirm';
button.classes.add('important');
button.onClick.listen((e) => window.alert('Confirmed!'));
。
在dart中被称为级联运算符
它允许您使用多个子序列操作:
示例:
banerad..load()…show()。
列出coursename;
coursename..添加(“java”)…添加(“颤振”)…添加(“飞镖”);
这是另一个例子
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
类相同;每个方法中只删除了一个差异,其中返回此
让我们使用级联特性
Calculator calculator = Calculator(0.0)
..add(12.0)
..subtract(10.0)
..add(5.0)..subtract(8.0);
print("Result: " + calculator.result().toString());
它的工作原理非常完美,与前面的代码类似,但cascade使用(双点)表示法来访问当前修改实例,而不是
表示法
为什么在Dart中级联?
一般来说,cascade非常有助于:
构建复杂对象(大量属性配置)
使对象更好地进行封装<代码>返回此项
使对象过于开放。
使用嵌套级联更快地构建对象。
更少的代码行
它取自:参考。。(在前一个例子中)指的是新列表()
,你的意思是我们在使用时再次创建一个新的列表
。
在我看来不是。我被你的新的
单词弄糊涂了,它真的是新的还是你在这里谈论的是新的
关键字。首先新的
现在是可选的。
引用由new list()
返回的列表,并允许在其上调用多个方法,如add(0)
addAll(…)
,而不重复l1。
并且是分配给l1
的已创建列表实例,而不是链中最后一个方法的返回值(addAll(…)
). 这回答了你的问题吗?当然!我知道从Dart 2.0开始,new
是可选的,我只是被上面上下文中的new
搞糊涂了,谢谢你的解释。。add(6)
就像l1。add(6)
,。add(6)
就像l1。add(5)。add(6)
add(5)
返回void
,您不能在void
上调用add()
,请遵循此文档:-严格地说,级联的“双点”符号不是运算符。这只是Dart语法的一部分。谢谢这个例子!知道为什么.onClick
不能转换为按钮.classes.onClick
?感谢您在示例中使用作业。作为Dart的新手,我读了一些关于双点表示法的书,但认为它只是用于链接void方法。为了澄清这一点,我感到困惑,在理解这个概念之前,我迭代了几次:在撰写本文时,cascade操作符有两种变体。即。。还有。。?不要与…混淆。。。还有。。。?它们是不同的,在Dart中称为扩展运算符。而扩展运算符。。。还有。。。?用于列表/集合、级联。。还有。。?可以对任何类型的对象调用,而不仅仅是列表。(上面的示例代码使用列表,但可以使用另一个对象,例如控制器)。同样,spread和cascade做完全不同的事情。
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;
}
}
Calculator calculator = Calculator(0.0)
..add(12.0)
..subtract(10.0)
..add(5.0)..subtract(8.0);
print("Result: " + calculator.result().toString());