DartDart

Dart中两个点..和三个点...的作用

2023-01-31  本文已影响0人  莲花怪兽

两个点(..)

先上官方解释:
级联运算符 (..) 可以实现对同一个对象进行一系列的操作。 除了调用函数, 还可以访问同一对象上的字段属性。 这通常可以节省创建临时变量的步骤, 同时编写出更流畅的代码。

官方Demo:
querySelector('#confirm') // 获取对象。
  ..text = 'Confirm' // 调用成员变量。
  ..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!'));

通过对比,很自然就容易看出..的核心,省去了临时变量,但是初次接触者,会感觉代码可读性较差一点。

另外:

级联运算符可以嵌套,例如:

final addressBook = (AddressBookBuilder()
      ..name = 'jenny'
      ..email = 'jenny@example.com'
      ..phone = (PhoneNumberBuilder()
            ..number = '415-555-0100'
            ..label = 'home')
          .build())
    .build();

在返回对象的函数中谨慎使用级联操作符。 例如,下面的代码是错误的:

var sb = StringBuffer();
sb.write('foo')
  ..write('bar'); // Error: 'void' 没哟定义 'write' 函数。

sb.write() 函数调用返回 void, 不能在 void 对象上创建级联操作。

三个点(...)

官方文档我没有找到定义
个人理解和JS中的扩展符是一个作用,都是对对象和数组做解构
例如:

main() {
  var test1 = {"a": 1, "b": 2, "c": 3};
  var test2 = {"d": 4, "f": 5};
  var test3 = {...test1, ...test2};
  print("test3====" + test3.toString());
  var test4 = [1, 2, 3];
  var test5 = [...test4, 4, 5, 6];
  print("test5===" + test5.toString());
}

image.png
上一篇下一篇

猜你喜欢

热点阅读