文章目录

  • 简介
  • Non-nullable类型
  • Nullable List Of Strings 和 List Of Nullable Strings
  • !操作符
  • late关键字
  • 总结

简介

在Dart 2.12中引入了null safety的新特性,也就是说dart程序中默认类型都是非空的,除非你显示告诉编译器,这个类型可以为空。

看起来是一个小小的改动,但是这个小小的改动导致了很多Dart包的大版本升级,从而导致使用Dart2.12之前的版本跟使用dart2.12之后的版本完全就是两个不同的世界。

真的这么奇妙吗?一起来看看Dart 2.12 null safety的特性吧。

Non-nullable类型

在感受Non-nullable类型之前,我们先看一段代码:

void main(){String name;print('name is $name.');
}

代码很简单,我们定义了一个String类型的name字符串,然后在print语句中打印它。

如果你是在dart 2.12版本之前,那么是没有问题的。

但是到了2.12,则会报错:

The non-nullable local variable 'name' must be assigned before it can be used.Try giving it an initializer expression, or ensure that it's assigned on every execution path.

意思就是说,name是非空的,你必须要给他赋个值。

通过强制不为空,保证了代码的安全性,非常好用。

那么如果name就可以为空怎么处理呢?

别急,我们可以给可以为空的类型后面加上?即可:

void main(){String? name;print('name is $name.');
}

Nullable List Of Strings 和 List Of Nullable Strings

假如我们要创建一个List,list里面包含的是String,则可以这样创建:

List<String> aListOfStrings = ['one', 'two', 'three'];

在dart 2.12中,非空检查也被用到了泛型中,所以,默认情况下List中的String也不能为空,如果非要为空,则需要这样写:

List<String?> aListOfNullableStrings = ['one', null, 'three'];

对于list本身来说,它也是不能为空的,如果要为空,则需要这样写:

List<String>? aNullableListOfStrings;

!操作符

如果你认为某个对象在使用的时候确定不是null,那么可以在表达式后面添加!,如下所示:

  String? word;word = aListOfNullableStrings.first;print(word!.length);

late关键字

有时候,我们知道某个对象一定不是空,但是目前来说,并不能立刻对其进行赋值,这时候就需要使用到late关键字。

下面是一个用到late的例子:

class Team {late final Coach coach;
}class Coach {late final Team team;
}void main() {final myTeam = Team();final myCoach = Coach();myTeam.coach = myCoach;myCoach.team = myTeam;print('All done!');
}

上面的代码中,我们有两个类互相引用,但是两个类都是不为空的,如果不使用late,则会编译失败。

使用late就可以在后面合适的时候对类中的属性进行初始化,从而保证代码的运行。

总结

以上就是dart 2.12中新增加的null safety的使用。

本文已收录于 http://www.flydean.com/24-dart-null-safety/

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!

dart系列之:安全看我,dart中的安全特性null safety相关推荐

  1. dart系列之:实时通讯,在浏览器中使用WebSockets

    文章目录 简介 dart:html中的WebSockets 创建一个WebSocket WebSocket的状态 发送消息 处理WebSocket事件 总结 简介 web客户端和服务器端通信有两种方式 ...

  2. php v5.,PHP V5.3 中的新特性,第 5 部分- 从 PHP V5.2 升级到 PHP V5.3

    PHP V5.3 中的新特性,第 5 部分: 从PHP V5.2 升级到 PHP V5.3 1 2 3 4 5 下一页 PHP V5.3 将于不久后发布."PHP V5.3 中的新特性&qu ...

  3. dart系列之:dart语言中的特殊操作符

    dart系列之:dart语言中的特殊操作符 文章目录 简介 普通操作符 类型测试操作符 条件运算符 级联符号 类中的自定义操作符 总结 简介 有运算就有操作符,dart中除了普通的算术运算的操作符之外 ...

  4. dart系列之:在dart中使用数字和字符串

    文章目录 简介 数字 字符串 StringBuffer 总结 简介 要想熟悉一种语言,最简单的做法就是熟悉dart提供的各种核心库.dart为我们提供了包括dart:core,dart:async,d ...

  5. dart系列之:dart类中的构造函数

    文章目录 简介 传统的构造函数 命名构造函数 构造函数的执行顺序 重定向构造函数 Constant构造函数 工厂构造函数 总结 简介 dart作为一种面向对象的语言,class是必不可少的.dart中 ...

  6. dart系列之:dart语言中的变量

    文章目录 简介 dart中的变量 定义变量 变量的默认值 Late变量 常量 总结 简介 flutter是google在2015年dart开发者峰会上推出的一种开源的移动UI构建框架,使用flutte ...

  7. dart系列之:在dart中使用packages

    文章目录 简介 pubspec.yaml get packages 使用packages 升级依赖 总结 简介 java中使用jar包来封装有用的功能,然后将其分发到maven仓库中,供其他人使用.同 ...

  8. dart系列之:和null说再见,null使用真实实践

    文章目录 简介 不需要初始化对象为null null的三元操作符 如果在使用中需要判断类型是否为空,则不要使用late 本地变量的类型提升 总结 简介 null可能是大家在编写程序中最为头疼的一个东西 ...

  9. dart系列之:dart优秀的秘诀-隔离机制

    文章目录 简介 dart中的隔离机制 生成一个Isolate Isolate之间的交互 一个例子 总结 简介 之前介绍了很多dart中的异步编程技巧,不知道大家有没有发现一个问题,如果是在java的异 ...

最新文章

  1. javaweb学习总结二十五(response对象的用法一)
  2. Centos 7下编译安装Apache
  3. 【Spark机器学习速成宝典】模型篇01支持向量机【SVM】(Python版)
  4. pythongif字符动图,利用Python如何制作好玩的GIF动图详解
  5. 如何在调用线程的时候传递参数
  6. 给网页标题添加icon小图标
  7. 字节跳动面试:java实例化对象必须调用类的构造方法
  8. 算法梳理之LightGBM
  9. CMOS模拟集成电路版图设计课程
  10. Linux快速入门教程
  11. Java使用POI操作Excel合并单元格
  12. 关于微信小程序web开发者工具模拟器出现空白问题
  13. Could not load requested class
  14. Druid——Hadoop-based Batch Ingestion
  15. 中文文本纠错任务简介
  16. batch、batch size与epoch
  17. 图像去燥——TV Loss
  18. 洒脱是人生的一种境界
  19. 计算机设备机房防静电标准,机房防静电地板设计标准是什么?
  20. 如何制作计算机启动盘,如何制作u盘启动盘 教你简单的操作方法

热门文章

  1. nexus 代理阿里云_Azure容器镜像代理服务失效
  2. PyCharm编写shell脚本无法运行
  3. POJ2236(并查集)
  4. [luogu2042] [NOI2005]维护数列
  5. 36.rustc编译参数.txt
  6. cocos2d-x初探学习笔记(7)--CCProgressTimer
  7. 经典|深入理解 Go高性能网络编程模型
  8. 阿里二面:你来设计一下 Flink 性能调优?
  9. RabbitMQ消息追踪之Firehose
  10. 55万字,阿里内部最新最全Java面试进阶手册,能横扫95%的面试官