Dart 语法糖

1,718 阅读1分钟

?. 与 ??

dart 语法糖 ?.

它的意思是左边如果为空返回 null,否则返回右边的值。

A?.B 如果 A 等于 null,那么 A?.B 为 null 如果 A 不等于 null,那么 A?.B 等价于 A.B

void main() {
  Animal animal = new Animal('cat');
  Animal empty = null;
  
  //animal 非空,返回 animal.name 的值 cat
  print(animal?.name);
  //empty 为空,返回 null
  print(empty?.name);
  
  //animal 非空,可以直接访问 animal.name 的值 cat
  print(animal.name);
  //empty 为空,抛出异常
  print(empty.name);
}

class Animal {
  final String name;
  Animal(this.name);
}

运行后会看到如下输出:
cat
null
cat
Uncaught exception:
Cannot read property 'get$name' of null

dart 语法糖 ??

它的意思是左边如果为空返回右边的值,否则不处理。

A??B 如果 A 等于 null,那么 A??B 为 B 如果 A 不等于 null,那么 A??B 为 A

以上面为例子,假设我们上面要求当 empty 为空时,默认值输出 unknown。 那么可以修改如下:

//empty 为空,返回 null
print(empty?.name);
改为:
//empty 为空,本来要返回 null,由于有 ??,返回 unknown
print(empty?.name??'unknown')