Dart 有什么问题??飞镖双问号?

Dart 有什么问题??飞镖双问号?,dart,operators,Dart,Operators,以下代码行有两个问号: final myStringList = prefs.getStringList('my_string_list_key') ?? []; 什么意思?双问号操作符的意思是“if null”。以下面的表达式为例 String a = b ?? 'hello'; 这意味着a等于b,但如果b为空,则a等于'hello' 另一个相关操作符是??=。例如: b ??= 'hello'; 这意味着如果b为空,则将其设置为等于hello。否则,不要改变它 参考 术语 这些

以下代码行有两个问号:

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

什么意思?

双问号操作符的意思是“if null”。以下面的表达式为例

String a = b ?? 'hello';
这意味着
a
等于
b
,但如果
b
为空,则
a
等于
'hello'

另一个相关操作符是
??=
。例如:

b ??= 'hello';
这意味着如果
b
为空,则将其设置为等于
hello
。否则,不要改变它

参考

术语

这些运算符统称为空感知运算符:

  • ??
    ——如果为空运算符
  • ??=
    ——空感知赋值
  • x?.p
    ——空感知访问
  • x?.m()
    ——空感知方法调用

    • Dart提供了一些方便的运算符,用于处理可能为空的值。一个是???=赋值运算符,它仅在变量当前为空时才为该变量赋值:

      int a; // The initial value of a is null.
      a ??= 3;
      print(a); // <-- Prints 3.
      
      a ??= 5;
      print(a); // <-- Still prints 3.
      
      int a;//a的初始值为空。
      a=3;
      
      打印(a);//有趣的是为什么会这样??不是吗?:,对于来自PHP的人来说,这是相当误导的,比如??在PHP中,它的意思完全相反。@Vedmant可能是因为三元运算符已经在使用
      字符串a=b==true?“x':'y'。哪个if null操作符只是三元null检查的简写,比如
      String a=a==null?“你好:a,
      @BrunoFinger
      在PHP中用于三元运算符的方式与此相同,并且有如下快捷方式代替
      $a=$b==true$b:'y'
      您可以键入
      $a=$b==true?:'y'
      或代替
      $a=$b==true?'x':$b
      -
      $a=$b==truex'
      你是否回复了一篇两年前已经回复的帖子,要求投票?
      print(1 ?? 3); // <-- Prints 1.
      print(null ?? 12); // <-- Prints 12.