0

我知道 Dart 有空检查速记

x = y ?? z;

x = y?.z;

但是如果我有这样的声明怎么办

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

我不想传递nullSomeClass构造函数 - 所以在那种情况下我想x设置为z(在我的具体情况下z恰好是null)。

我不知道在这种情况下如何/是否可以使用任何速记,或者我是否坚持直接空检查。

4

1 回答 1

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 值从何而来?它的意义是什么? (如果你在大项目中,你可以使用依赖注入或工厂。)

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

这些是我会问自己的一些事情。但如果你正在编写一个快速脚本,这可能是一个很长的镜头。你现在可能已经完成了你的任务,也许你一开始真的不需要速记。

于 2019-02-22T09:45:48.260 回答