Dart:二十九、空安全

空安全

  • 减少数据异常错误
  • 提高程序性能

默认不可空

String title = 'ducafecat';

type? 可空

String? title = null;

value! 值保证不为空,主观上

String? title = 'ducafecat';
String newTitle = title!;

value?. 不为空才执行

String? title = 'ducafecat';
bool isEmpty = title?.isEmpty();

value?? 如果空执行

String? title = 'ducafecat';
String newTitle = title ?? 'cat';

late 声明

延迟加载修饰符

声明一个不可空的变量,并在声明后初始化。

late String description;

void main() {
  description = 'Feijoada!';
  print(description);
}

late 类成员延迟初始

class WPHttpService extends GetxService {
  late final Dio _dio;

  @override
  void onInit() {
    ...

    _dio = Dio(options);

    ...
  }

加上 late 后就可以不用构造函数的时候初始化了

List、泛型

  List<String?>? l;
  l = [];
  l.add(null);
  l.add('a');
  print(l);
类型 集合是否可空 数据项是否可空
List<String> no no
List<String>? yes no
List<String?> no yes
List<String?>? yes yes

Map

  Map<String, String?>? m;
  m = {};
  m['a'] = 'b';
  m['b'] = null;
  print(m);
类型 集合是否可空 数据项是否可空
Map<String, int> no no*
Map<String, int>? yes no*
Map<String, int?> no yes
Map<String, int?>? yes yes

* 可能返回空

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容