什么是 ??Dart中有两个问号?


85

以下代码行带有两个问号:

final myStringList = prefs.getStringList('my_string_list_key') ?? [];

什么意思?

Answers:


171

??双问号操作装置“如果空”。以下面的表达式为例。

String a = b ?? 'hello';

这意味着a等于b,但如果b为null,则a等于'hello'

另一个相关的运算符是??=。例如:

b ??= 'hello';

这意味着如果b为null,则将其设置为hello。否则,请勿更改。

参考

条款

飞镖1.12发布消息统称以下为空感知运营商

  • ?? -如果为null运算符
  • ??= -空感知分配
  • x?.p -空感知访问
  • x?.m() -空感知方法调用

3
有趣的原因是什么?而不是?:对于来自PHP的人来说,这是相当误导的,例如?? 在PHP中意味着完全相反。
Vedmant

1
@Vedmant可能是因为?三元运算符已使用它:String a = b == true ? 'x' : 'y';。if-null运算符只是三元null检验(如)的简写String a = a == null ? 'hello : a;
布鲁诺·

1
@BrunoFinger?用于三元运算符在PHP同样的方式,并有快捷键喜欢的,而不是$a = $b === true ? $b : 'y'你可以输入$a = $b === true ?: 'y'或代替$a = $b === true ? 'x' : $b-$a = $b === true ?? 'x'
Vedmant

|| imo会更加清晰
Ced
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.