我知道Dart具有空检查速记
x = y ?? z;
和
x = y?.z;
但是如果我有这样的声明
x = (y != null) ? SomeClass(y) : z;
我不想将null
传递给SomeClass
构造函数-因此,在这种情况下,我希望将x
设置为z
(在我的特定情况下,{ {1}}恰好是z
)。
在这种情况下,我无法弄清楚如何/是否可以使用任何速记方式,或者是否无法进行直接空值检查。
答案 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值从何而来?是什么意思? (如果您在大型项目中,则可以使用“依赖注入”或“工厂”。)
也许我有一个视图组件,其中空字符串比空字符串更有用?
这些是我会问自己的一些事情。 但是,如果您要破解一个快速脚本,这可能是一个漫长的尝试。 您现在可能已经完成了任务,也许您真的真的不需要速记。