在可能的空值上调用方法时使用问号运算符?

时间:2018-04-07 04:49:41

标签: dart

我有一个包含可能为null的对象的变量。在尝试调用方法时,我必须检查null。如果变量为null,我希望结果为false。什么被认为是好的和可读的风格?

e.g。

class MyClass {
  bool boolMethod() {
    return true;
  }
}

void main() {
  MyClass mc = new MyClass();
  MyClass mcnull = null;

  bool val1 = mc?.boolMethod();
  bool val1null = mcnull?.boolMethod();

  bool val2 = mc != null && mc.boolMethod();
  bool val2null = mcnull != null && mcnull.boolMethod();
}

特别是在if语句中使用时,我认为第一个版本更具可读性:

if (mc?.boolMethod())...

if (mc != null && mc.boolMethod())...

但是IntelliJ给了我提示'的价值?'运算符可以是' null'它不适合作为本地运算符的操作数。(null_aware_in_logical_operator)。好的 - 这是正确的,因为当变量为null时,我使用null作为布尔值。但在我的情况下它没问题,我尽量避免压制警告。

建议的方式是什么?其他想法?

1 个答案:

答案 0 :(得分:5)

我认为一种常见的模式是

  bool val1 = (mc?.boolMethod() ?? false);

这里不需要这些表达但是如果将这些表达式嵌入到更复杂的表达式中,由于??

的优先级较低,它们通常是获得预期行为所必需的