刚开始学习Dart语言,傻傻的分不清?、??、!怎么用,下面就总结一下。
1、定义常量/变量
报错解决1、Change 'String' to 'Null' type annotation 即改变类型为Null
报错解决2、Make 'aaa' nullable 使aaa可为空,即取消非空判定
2、定义有返回值的方法
报错解决1、Make the return type nullable 即返回类型取消非空判定
报错解决2、Replace the return type with 'Null' 即返回类型为Null
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");
String? getA() { return "bbb"; } String? aaa=getA(); String bbb= aaa ?? "ccc"; print("aaa=====$aaa"); print("bbb=====$bbb");
由结果可知 aaa?? "ccc"表示如果aaa为null则返回ccc,aaa不为null则返回aaa的值。
5、??=的使用
String? getA() { return null; } print("aaa=====$aaa"); aaa ??= "bbb"; print("aaa=====$aaa");
String? getA() { return "aaa"; } print("aaa=====$aaa"); aaa ??= "bbb"; print("aaa=====$aaa");
由结果可知 aaa??="bbb";如果aaa为null则将bbb赋值给aaa,如果不为null则返回aaa的值。
6、!的使用
报错如下:Null check operator used on a null value 对空值使用的空检查操作符,说明!是空检查操作符,为空则会抛异常.
在使用!的时候最好try...catch...一下,避免上述报错,!使用时要慎重.
运行结果如下:
从6可以看出,!会判断是否为空,为空则抛出异常,不为空则正常运行.
7、? !的使用
(1)
报错:The method '[]' can't be unconditionally invoked because the receiver can be 'null'. 方法'[]'不能被无条件调用,因为接收方可能是'null'.
这里使用?或!号都可以。
(2)
此时不需要使用?或!,因为 List
补充:
1、左边?.右边 如果左边为null则返回null,如果左边不为null则返回右边;
2、左边!.右边 如果左边为null则抛出异常,代码不会再继续向下执行,如果左边不为null则返回右边。
所以再使用!和!.时一定要慎重.