dart系列之:安全看我,dart中的安全特性null safety
文章目录
- 简介
- 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相关推荐
- dart系列之:实时通讯,在浏览器中使用WebSockets
文章目录 简介 dart:html中的WebSockets 创建一个WebSocket WebSocket的状态 发送消息 处理WebSocket事件 总结 简介 web客户端和服务器端通信有两种方式 ...
- 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 ...
- dart系列之:dart语言中的特殊操作符
dart系列之:dart语言中的特殊操作符 文章目录 简介 普通操作符 类型测试操作符 条件运算符 级联符号 类中的自定义操作符 总结 简介 有运算就有操作符,dart中除了普通的算术运算的操作符之外 ...
- dart系列之:在dart中使用数字和字符串
文章目录 简介 数字 字符串 StringBuffer 总结 简介 要想熟悉一种语言,最简单的做法就是熟悉dart提供的各种核心库.dart为我们提供了包括dart:core,dart:async,d ...
- dart系列之:dart类中的构造函数
文章目录 简介 传统的构造函数 命名构造函数 构造函数的执行顺序 重定向构造函数 Constant构造函数 工厂构造函数 总结 简介 dart作为一种面向对象的语言,class是必不可少的.dart中 ...
- dart系列之:dart语言中的变量
文章目录 简介 dart中的变量 定义变量 变量的默认值 Late变量 常量 总结 简介 flutter是google在2015年dart开发者峰会上推出的一种开源的移动UI构建框架,使用flutte ...
- dart系列之:在dart中使用packages
文章目录 简介 pubspec.yaml get packages 使用packages 升级依赖 总结 简介 java中使用jar包来封装有用的功能,然后将其分发到maven仓库中,供其他人使用.同 ...
- dart系列之:和null说再见,null使用真实实践
文章目录 简介 不需要初始化对象为null null的三元操作符 如果在使用中需要判断类型是否为空,则不要使用late 本地变量的类型提升 总结 简介 null可能是大家在编写程序中最为头疼的一个东西 ...
- dart系列之:dart优秀的秘诀-隔离机制
文章目录 简介 dart中的隔离机制 生成一个Isolate Isolate之间的交互 一个例子 总结 简介 之前介绍了很多dart中的异步编程技巧,不知道大家有没有发现一个问题,如果是在java的异 ...
最新文章
- javaweb学习总结二十五(response对象的用法一)
- Centos 7下编译安装Apache
- 【Spark机器学习速成宝典】模型篇01支持向量机【SVM】(Python版)
- pythongif字符动图,利用Python如何制作好玩的GIF动图详解
- 如何在调用线程的时候传递参数
- 给网页标题添加icon小图标
- 字节跳动面试:java实例化对象必须调用类的构造方法
- 算法梳理之LightGBM
- CMOS模拟集成电路版图设计课程
- Linux快速入门教程
- Java使用POI操作Excel合并单元格
- 关于微信小程序web开发者工具模拟器出现空白问题
- Could not load requested class
- Druid——Hadoop-based Batch Ingestion
- 中文文本纠错任务简介
- batch、batch size与epoch
- 图像去燥——TV Loss
- 洒脱是人生的一种境界
- 计算机设备机房防静电标准,机房防静电地板设计标准是什么?
- 如何制作计算机启动盘,如何制作u盘启动盘 教你简单的操作方法
热门文章
- nexus 代理阿里云_Azure容器镜像代理服务失效
- PyCharm编写shell脚本无法运行
- POJ2236(并查集)
- [luogu2042] [NOI2005]维护数列
- 36.rustc编译参数.txt
- cocos2d-x初探学习笔记(7)--CCProgressTimer
- 经典|深入理解 Go高性能网络编程模型
- 阿里二面:你来设计一下 Flink 性能调优?
- RabbitMQ消息追踪之Firehose
- 55万字,阿里内部最新最全Java面试进阶手册,能横扫95%的面试官