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());