缺少 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。
我知道 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。