列出在dart中使用双点(。)?

时间:2018-03-23 10:38:01

标签: dart

有时候我会看到这一点 List list = [];

然后list..add(color)

使用1点(.)和2点(..)的区别是什么?

5 个答案:

答案 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");

这是另一个例子

Here is another example

答案 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使对象太开放。 嵌套级联可以更快地构建对象。 更少的代码行。

它取自:Method chaining using Cascade in Dart