Dart 语法总结3:Sound null safety (健壮的空安全)

目录

1. 什么是sound null safety

2. Null safety的设计原则

Non-nullable by default 默认是 non-nullable: 如果没有指定变量为 nullable,默认即为 non-nullable。

Incrementally adoptable 逐步迁移: 在工程中可以同时存在空安全和非空安全混编的代码,并提供工具逐步迁移。

Fully sound 完全符合健壮性: 只要类型系统确定该变量是 non-nullable,即该变量永远都不会为 null, 并开启了编译器优化,拥有更小的二进制以及更快的运行速度。

3.相关操作符

Nullable and non-nullable types(?)

The null assertion operator (!)

late 关键字

4. 旧的项目迁移到 null safety


1. 什么是sound null safety

从 Dart 2.12, Flutter 2.0开始支持这个特性

environment:
  sdk: ">=2.12.0 <3.0.0"

使用这个特性之后发生变化如下:

  • 默认变量的声明值都不能为 null, 即: non-nullable
  • 如果你想让这个变量可以为null, 在变量的数据类型声明后加 ? 表示该变量可以有值也可以为
  • null, 即 nullable
//下面的变量都不能为null In null-safe Dart, none of these can ever be null.
var i = 42; // Inferred to be an int.
String name = getFileName();
final b = Foo();


//在null-safe dart中表示该变量可以为null
int? aNullableInt = null;

2. Null safety的设计原则

  1. Non-nullable by default 默认是 non-nullable: 如果没有指定变量为 nullable,默认即为 non-nullable。

  2. Incrementally adoptable 逐步迁移: 在工程中可以同时存在空安全和非空安全混编的代码,并提供工具逐步迁移。

  3. Fully sound 完全符合健壮性: 只要类型系统确定该变量是 non-nullable,即该变量永远都不会为 null, 并开启了编译器优化,拥有更小的二进制以及更快的运行速度。

3.相关操作符

  • Nullable and non-nullable types(?)

        int ? a  申明?前面的类型可以为空类型

  • The null assertion operator (!)

int ? a;
int a = a!;

Point? point;
int b = point!.x;  

        告诉编译器express是非空的,可以赋值给一个非空的对象

  • late 关键字

        用于当无法对 non-nullable 立即赋值的时候,可以用该关键字延迟赋值, 注意 late 关键字和         final 是可以共存的。以下三点

  1. 不需要立即赋值。
  2. 可以稍后赋值
  3. 在访问之前确保赋值了。(没赋值即访问抛异常 LateInitializationError)

4. 旧的项目迁移到 null safety

  1. Wait for the packages that you depend on to migrate. 等待你依赖的库迁移完成
  2. Migrate your package’s code, preferably using the interactive migration tool. 迁移你的应用代码,使用交互性的迁移工具
  3. Statically analyze your package’s code.  分析你应用代码
  4. Test to make sure your changes work. 测试你的改变
  5. If the package is already on pub.dev, publish the null-safe version as a prerelease version. 如果你发布了包在远程仓库,发布null-safe的版本到正式仓库

https://dart.dev/null-safety/migration-guide  详细的引导在这个链接

//查看dart版本号码
dart --version
//检查当前依赖状态
dart pub outdated --mode=null-safety
//升级依赖
dart pub upgrade --null-safety 
dart pub get


//通过工具迁移
dart migrate

通过迁移命令后,在浏览器会打开迁移结果,接下来需要做几件事情:

1.  理解迁移结果

2. 改进迁移结果 (看英文可能会更清楚一点)

  • In the Edit Details pane of the migration tool, you can insert hint markers using the Add /*?*/ hint and Add /*!*/ hint buttons.

    These buttons add comments to your file immediately, and there’s no Undo. If you don’t want a hint that the tool inserted, you can use your usual code editor to remove it.

  • You can use an editor to add hint markers, even while the tool is still running. Because your code hasn’t opted into null safety yet, you can’t use new null-safety features. You can, however, make changes like refactoring that don’t depend on null-safety features.

    When you’ve finished editing your code, click Rerun from sources to pick up your changes.

3.可以选择部分文件进行迁移

4.执行改变

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

专注和坚持是最好的导师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值