缺少Dart空检查速记吗?

时间:2019-02-22 09:06:05

标签: dart null-check null-coalescing

我知道Dart具有空检查速记

x = y ?? z;

x = y?.z;

但是如果我有这样的声明

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

我不想将null传递给SomeClass构造函数-因此,在这种情况下,我希望将x设置为z(在我的特定情况下,{ {1}}恰好是z)。

在这种情况下,我无法弄清楚如何/是否可以使用任何速记方式,或者是否无法进行直接空值检查。

1 个答案:

答案 0 :(得分:0)

最简单的答案是:没有速记。您的代码很好。

真正的简短答案是:取决于情况。 ;)

如果您考虑周围的代码库,则总体上可以提出不同的体系结构。

您最好将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值从何而来?是什么意思? (如果您在大型项目中,则可以使用“依赖注入”或“工厂”。)

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

这些是我会问自己的一些事情。 但是,如果您要破解一个快速脚本,这可能是一个漫长的尝试。 您现在可能已经完成了任务,也许您真的真的不需要速记。