Dart的一些亮点(持续更新中...)

1,001 阅读1分钟

本文基于Dart 2.4版本,提炼出一些语言上的亮点,针对有一定语言基础的同学快速上手。

操作符(Operators)

?? ??=

看看写下面的代码,当a为null时,使用value来赋值:

a = a == null ? value: a;  // java
a = a || value;  // javascript 

在Dart里使用??可以简写上述代码,

a = a ?? value; // dart

更进一步,使用复合赋值让代码更简要,

a ??= value;

as is is!

用于在运行时检查对象类型

操作符 表示
as 类型强制转换
is 若对象为指定类型返回True
is! 与is相反

例如:

if (emp is Person) {
  emp.firstName = 'Bob';
}
(emp as Person).firstName = 'Bob'; 

..

级联操作符,针对同一对象的连续操作,如下:

var button = querySelector('#confirm');
button.text = 'Confirm';
button.classes.add('important');
button.onClick.listen((e) => window.alert('Confirmed!'));

使用..操作符可以简写:

querySelector('#confirm') // Get an object.
  ..text = 'Confirm' // Use its members.
  ..classes.add('important')
  ..onClick.listen((e) => window.alert('Confirmed!'));

...

用于集合类的展开操作,使得在向一个Collection集合中插入元素时更加方便。

final list = [1, 2, 3];
final list2 = [
    ...list, 
    4];  // [1, 2, 3, 4]

目前...还不支持对象展开,这一点没有ES6方便

类型系统(Types)

Array即List

在Dart里不再有独立的数组类型,统一使用List表示。

final list = [1, 2, 3];
final list = <int>[1, 2, 3];

由于Dart有丰富的操作符,List完全可以使用类似数组的操作。例如下标操作符[].

final first = list[0];

函数(Functions)

可选命名参数

可选位置参数

类(Classes)

泛型(Generics)

参考资源: