缺少 Dart 空检查 shorthand?

Missing Dart null checking shorthand?

我知道 Dart 有空检查简写

x = y ?? z;

x = y?.z;

但是如果我有这样的陈述怎么办

x = (y != null) ? SomeClass(y) : z;

我不想将 null 传递给 SomeClass 构造函数 - 所以在那种情况下我希望将 x 设置为 z (在我的特定情况 z 恰好是 null).

我想不通 how/if 我可以在这种情况下使用任何简写,或者如果我坚持使用直接 null 检查。

简短的回答是:没有shorthand。你的代码很好。

真正简短的回答是:视情况而定。 ;)

如果你考虑周围的代码库,你可以想出一个不同的整体架构。

你也可以将 null 传递给构造函数

x = SomeClass(y);

然后在你的初始化列表中给出一个合理的默认值:

class SomeClass {
  dynamic _value;

  SomeClass(value) _value = value ?? ''; 
}

或者抛出异常:

var nullError = Exception('Null value not allowed');

class SomeClass {
  dynamic _value;

  SomeClass(value) _value = value ?? (throw nullError);
}

虽然更惯用的方式是这样的:

class SomeClass {
  dynamic _value;

  SomeClass(value) {
    ArgumentError.checkNotNull(value);
    _value = value;
}

由于我对您的其余代码一无所知,因此无法给您正确的答案。 但我建议你问问自己:

  • 这个z值从何而来?它的含义是什么? (如果你在大项目中,你可以使用依赖注入或工厂。)

  • 也许我有一个视图组件,其中空字符串比 null 更有用?

这些是我会问自己的一些事情。 但是,如果你正在破解一个快速脚本,这可能是一个远景。 您现在可能已经完成了任务,也许您一开始就真的不需要 shorthand。