dart中?、??、??=以及!用法区分

86 阅读1分钟

前言

在dart中有几个常用的操作运算符,对于初学者而言很容易混淆,特此记录一下。

用法

  • ? 安全调用运算符

在对一个对象进行方法调用或属性访问时,如果该对象为 null,则会抛出一个空指针异常。而安全调用运算符可以避免这种情况的发生

String? a; //可空类型允许不赋值(值为null),不会报错
var obj;
obj?.foo();

如果obj为空,就不会调用foo方法

  • ?? 空判断运算符 用于在表达式结果为null时,提供默认值。即若左侧为null,则将右侧值赋给变量,否则保持操作不变。
var name = 'Jack';
var temp = name ?? 'Tom';

此处name初始值不为null,则temp为Jack,保持不变。

  • ??= 运算符 表示在变量值为null时,进行赋值,避免覆盖已有值。
String name = 'Jack';
name ??= 'Tom';

如果name初始值为null,则会被赋值为Tom。此处name有初始值,则保持不变。

  • ! 空值断言操作符 确定一个表达式不应该为 null,但编译器无法确定时,你可以使用!来告诉编译器你确信该表达式不是 null。否则在运行时会出现 NullPointerException
String? name = getName();
print(name!.length); 

如果name为null,则抛出异常。