Dart 语言学习

Dart 中一切皆对象 Object!

变量

类型推断

1. dart 可以类型推断

变量存储对变量值的"引用(Reference)"

var name = 'Bob';

也可以声明类型

String name = 'Bob';
Null Safety

Dart 语言强制执行“健全的Null 安全(Sound Null Safety)”。Null Safety 能防止无心的访问值为 null 的变量的错误,这个错误称为 null dereference error,当访问的属性或方法被评估(evaluate)为 null 时 ,就会发生null dereference error

例外:当 null 支持(support)属性或方法时,比如toString()  hashCode

Dart 编译器会在编译时检测到 null dereference error,因此不会造成运行时错误。

Sound Null Safety将潜在的runtime errors 转变为edit-time编辑时分析错误。

Dart 引入的关键改变

1. 可以使用来控制变量、参数等是否可以为 null

String? name  // Nullable type. Can be `null` or string.

String name   // Non-nullable type. Cannot be `null` but can be string.

2. 变量使用之前必须初始化

可为 Null的变量(Nullable variables),默认值为 null,可以不设初始值。

非Null 的变量(non-nullable),没有默认值,必须自己初始化,在初始化之前不能被 observe

Sound Null Safety将潜在的runtime errors 转变为edit-time编辑时分析错误。

当non-null variable处于以下状态时,Null Safety会标记该变量:

  • 未使用non-null 值进行初始化。
  • 分配了一个空值。

Default value

Nullable variables 默认值为 null,可以不设初始值。

Non-null variable 声明时可以不用设初始值,但是使用之前必须赋值。

Top-level 和Class变量是延迟初始化的;初始化代码在第一次使用变量时运行。

Late variables

使用场景:
  • 声明一个Non-null variable,该变量在声明后进行初始化。
  • 延迟初始化一个变量。

Dart 可以在non-nullable variable使用之前检测它是什么时候赋的值,但通常无法检测top-level variables 和实例变量。

late String description;

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

如果能保证变量会在使用赋值,就可以使用 late。

如果使用了late 定义一个变量,后来没有初始化,runtime时会报错。

lazy initialization(类似iOS 懒加载)

当使用 late 标记一个变量,同时在声明时赋初始值,那么这个initializer 在变量第一次使用时才执行。在一些场景中使用很方便:

  • 变量不一定会被使用,并且初始化成本很高。
  • 初始化一个实例变量,并且它的初始化程序需要访问 this。(同Swift 类加载函数中使用Self)
// This is the program's only call to readThermometer().
late String temperature = readThermometer(); // Lazily initialized.

Final and const(常量)

如果不打算修改变量,请使用 Final 或 const,替代 var 或作为类型的补充。

Final 变量只能设置一次;

Const 变量是编译时常量。 Const 变量是隐式的 Final 变量。

实例变量可以使用 final 不能使用 Const。

直接使用类型声明,创建的是一个变量,不是常量。

final name = 'Bob'; // Without a type annotation
final String nickname = 'Bobby'; // With a type annotation

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值