flutter 在dart中,对于可空类型,?和!之间有什么区别?

jyztefdp  于 2022-11-17  发布在  Flutter
关注(0)|答案(3)|浏览(329)

我是新来的飞镖和Flutter。
在dart中,对可空类型使用?和!有什么区别?

validator: ((value) {
   if (value?.isEmpty) {
        return "Field is required";
   }
        return null;
   }),

validator: ((value) {
   if (value!.isEmpty) {
        return "Field is required";
   }
        return null;
   }),

提前感谢!

w8f9ii69

w8f9ii691#

关于它的好主题:What is Null Safety in Dart?
但简而言之,当您希望允许值为null并相应地使用它时,可以使用“?”,如下所示:

String? test;
if (test?.isEmpty == true) { // And is not null, but you don't need to check it
  // If null, will never pass there but without error
}

当您希望确保具有不可为空的值时,请使用“!”,如下所示:

String? test;
if (test!.isEmpty == true) { // Will throw an error
  ...
}
vd8tlhqk

vd8tlhqk2#

两者之间的差异,一个可以初始为空,但另一个不能。
我希望你在下面的例子中理解。
要指定变量是否可以为空,那么可以使用可空类型?
运算符,让我们看一个示例:

String? carName;  // initialized to null by default
int? value = 36;  // initialized to non-null
value = null; // can be re-assigned to null

**注意:**您不需要在使用可为null的变数之前先将它初始化。预设会将它初始化为null。
判断提示运算子(!)

使用空Assert运算符(!)使Dart将可为空的表达式视为不可为空的表达式(如果您确定它不为空)。

int? someValue = 30;
int data = someValue!; // This is valid as value is non-nullable

在上面的示例中,我们告诉Dart变量someValue为空,将其赋值给不可为空的变量(即data)是安全的
我希望你能理解????
至于你的例子;
如果你注意到了,验证器{String?value}的值最初可以是null。2但是在你写的代码中,两者之间的唯一区别是运行成本。3 '?'当你再次定义它时,它会花费一些时间。4因为它已经在函数中声明了它将是null作为开始。

gab6jxml

gab6jxml3#

这是一个很好的问题,这里的答案是"person“。例如,”?"表示它将在以后获得值,或者它可以为空(最初或在任何情况下)
字符串?carName;
1.'!'表示您将接收值,且该值不能为空。它将检查该值,如果该值为空,则将给予异常。
请看下面例子,以了解它们之间的明显区别:
列表?块;...//您不确定块变量是否已初始化。//块可以为空。final Block?block = blocks?.first;
//您确定blocks变量已初始化。//块不可为空。final Block block = blocks!.first;
希望你得到它,如果是接受答案或评论我,如果你有问题

相关问题