刚开始使用原生 iOS 背景的 Flutter,所以我有一个关于 Dart beta 空安全性的快速问题。
所以在 Swift 中,因为他们和 Kotlin 一样从一开始就有 null 安全的想法,所以我非常喜欢该语言的两个特性是if let
和guard let
. 这两个使使用可选值变得更加容易。我不确定 Dart 的 beta 版本是否有类似的东西。
谢谢
刚开始使用原生 iOS 背景的 Flutter,所以我有一个关于 Dart beta 空安全性的快速问题。
所以在 Swift 中,因为他们和 Kotlin 一样从一开始就有 null 安全的想法,所以我非常喜欢该语言的两个特性是if let
和guard let
. 这两个使使用可选值变得更加容易。我不确定 Dart 的 beta 版本是否有类似的东西。
谢谢
我不是 Swift 方面的专家,但 Dart 会使用 null 检查来自动提升类型,我认为这主要完成了if let
and的工作guard let
。
例如:
String? x = possiblyReturnsNull();
if (x != null) {
// All code within this block treats `x` as non-nullable.
}
// All code outside the block continues to treat `x` as nullable.
请注意,不会对非局部变量执行提升,因此对于那些您需要显式引入局部引用的变量。(有一个语言建议提供一种机制,允许更好的机制添加本地引用而不污染外部范围。)
我将加入这一点,因为我也来自 Swift,并且非常喜欢使用后卫。除了@jamesdlin 所说的,相反的情况也是如此。
因此,您可以在功能上执行 Swift 保护语句:
String? x = possiblyReturnsNull();
if (x == null) return whatever; // This works like Swift's guard
// All code outside the block now treats `x` as NON-nullable.
对已接受答案的一个小扩展是,Flutter 还允许强制展开 Optional。因此,如果您正在访问未保存在变量中的非零值,例如在字典中,您需要在 if 语句中将其解包:
if (someDict[someKey] != null) {
print(someDict[someKey]!)
}
//
在 Dart 中检查 null 安全性:
value ?? 0