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

问题描述 投票:2回答:1

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

EG

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',它不适合作为locaical运算符的操作数。 (null_aware_in_logical_operator)。好的 - 这是正确的,因为当变量为null时,我使用null作为布尔值。但在我的情况下这是好的,我尽量避免压制警告。

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

dart
1个回答
5
投票

我认为一个共同的模式是

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

这里不需要parens但是如果这些表达式嵌入到更复杂的表达式中,由于??的优先级较低,它们通常是获得预期行为所必需的

© www.soinside.com 2019 - 2024. All rights reserved.