我知道 Dart 有空检查速记
x = y ?? z;
和
x = y?.z;
但是如果我有这样的声明怎么办
x = (y != null) ? SomeClass(y) : z;
我不想传递null
给SomeClass
构造函数 - 所以在那种情况下我想x
设置为z
(在我的具体情况下z
恰好是null
)。
我不知道在这种情况下如何/是否可以使用任何速记,或者我是否坚持直接空检查。
我知道 Dart 有空检查速记
x = y ?? z;
和
x = y?.z;
但是如果我有这样的声明怎么办
x = (y != null) ? SomeClass(y) : z;
我不想传递null
给SomeClass
构造函数 - 所以在那种情况下我想x
设置为z
(在我的具体情况下z
恰好是null
)。
我不知道在这种情况下如何/是否可以使用任何速记,或者我是否坚持直接空检查。
简短的回答是:没有速记。你的代码很好。
真正简短的答案是:这取决于。;)
如果您考虑周围的代码库,您可以提出一个不同的整体架构。
您也可以将 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 值从何而来?它的意义是什么? (如果你在大项目中,你可以使用依赖注入或工厂。)
也许我有一个视图组件,其中空字符串比空值更有用?
这些是我会问自己的一些事情。但如果你正在编写一个快速脚本,这可能是一个很长的镜头。你现在可能已经完成了你的任务,也许你一开始真的不需要速记。