flutter学习笔记之Dart-8 问号、双问号、感叹号的理解

刚开始学习Dart语言,傻傻的分不清?、??、!怎么用,下面就总结一下。

1、定义常量/变量

flutter学习笔记之Dart-8 问号、双问号、感叹号的理解_第1张图片

报错解决1、Change 'String' to 'Null' type annotation 即改变类型为Null

报错解决2、Make 'aaa' nullable 使aaa可为空,即取消非空判定

 

 2、定义有返回值的方法

flutter学习笔记之Dart-8 问号、双问号、感叹号的理解_第2张图片 报错解决1、Make the return type nullable 即返回类型取消非空判定

flutter学习笔记之Dart-8 问号、双问号、感叹号的理解_第3张图片

报错解决2、Replace the return type with 'Null' 即返回类型为Null

flutter学习笔记之Dart-8 问号、双问号、感叹号的理解_第4张图片

3、1和2的配合使用

Null getA() {
  return null;
}
String? getA() {
  return null;
}

都可以使用 String? aaa=getA();接收。

由1、2和3可知?有取消非空判断的意思。

4、??的使用

String? getA() {
  return null;
}
String? aaa=getA();
String bbb= aaa ?? "ccc";
print("aaa=====$aaa");
print("bbb=====$bbb");

flutter学习笔记之Dart-8 问号、双问号、感叹号的理解_第5张图片

String? getA() {
  return "bbb";
}
String? aaa=getA();
String bbb= aaa ?? "ccc";
print("aaa=====$aaa");
print("bbb=====$bbb");

flutter学习笔记之Dart-8 问号、双问号、感叹号的理解_第6张图片

 由结果可知 aaa?? "ccc"表示如果aaa为null则返回ccc,aaa不为null则返回aaa的值

5、??=的使用

String? getA() {
  return null;
}
print("aaa=====$aaa");
aaa ??= "bbb";
print("aaa=====$aaa");

flutter学习笔记之Dart-8 问号、双问号、感叹号的理解_第7张图片

String? getA() {
  return "aaa";
}
print("aaa=====$aaa");
aaa ??= "bbb";
print("aaa=====$aaa");

 flutter学习笔记之Dart-8 问号、双问号、感叹号的理解_第8张图片

由结果可知 aaa??="bbb";如果aaa为null则将bbb赋值给aaa,如果不为null则返回aaa的值

6、!的使用

flutter学习笔记之Dart-8 问号、双问号、感叹号的理解_第9张图片

 报错如下:Null check operator used on a null value  对空值使用的空检查操作符,说明!是空检查操作符,为空则会抛异常.

flutter学习笔记之Dart-8 问号、双问号、感叹号的理解_第10张图片

在使用!的时候最好try...catch...一下,避免上述报错,!使用时要慎重.

flutter学习笔记之Dart-8 问号、双问号、感叹号的理解_第11张图片

运行结果如下:

从6可以看出,!会判断是否为空,为空则抛出异常,不为空则正常运行. 

7、?   !的使用

(1)

flutter学习笔记之Dart-8 问号、双问号、感叹号的理解_第12张图片

flutter学习笔记之Dart-8 问号、双问号、感叹号的理解_第13张图片

报错:The method '[]' can't be unconditionally invoked because the receiver can be 'null'.  方法'[]'不能被无条件调用,因为接收方可能是'null'.

这里使用?或!号都可以。

 (2)

flutter学习笔记之Dart-8 问号、双问号、感叹号的理解_第14张图片

flutter学习笔记之Dart-8 问号、双问号、感叹号的理解_第15张图片

此时不需要使用?或!,因为 List list=[] 是正常定义的,与(1)中的不一样List? list。

补充:

1、左边?.右边   如果左边为null则返回null,如果左边不为null则返回右边;

2、左边!.右边   如果左边为null则抛出异常,代码不会再继续向下执行,如果左边不为null则返回右边。

所以再使用!和!.时一定要慎重.

你可能感兴趣的:(flutter,flutter)