变量
var
声明变量,可以赋值不同类型的值,会自动推断变量的类型
late
- 声明一个不可为 null 的变量,该变量在声明后进行初始化
late String description;
void main() {
description = 'Feijoada!';
print(description);
}
- 延迟初始化变量
在下面的示例中,如果temperature
从未使用该变量,则readThermometer()
永远不会被调用:
late String temperature = readThermometer();
const
修饰的变量只可以被赋值一次。const
修饰的变量在整个App
的生命周期内都是不可变的常量,在内存中也只会创建一次,之后的每次调用都会复用第一次创建的对象
final
用来修饰变量,只能被赋值一次,运行时赋值。也就是当程序运行到这里才会被赋值。
const 和 final 的区别
final
运行时赋值,const
编译时赋值
final
内容相同指向不同变量,const
内容相同指向相同对象
final
定义的list
可以修改,const
则不能修改
const
可以创建常量值以及修饰常量构造函数
final
不能修饰类和方法
操作符?
初始值可以为null
int age = null; // false
int? age = null; // true
as
、is
、is!
as
是类型转换
void main() {
Object a = 1;
int b = a as int;
print(b);
}
is
、is!
是类型判断,is
判断是对应元素,is!
判断是不对应元素
void main() {
Object a = 1;
print(a is int); // 输出 true
print(a is! int); // 输出 false
}
??=
仅在变量为null
时才会赋值
void main() {
var a;
a ??= 1;
a ??= 2;
print(a); // 输出 1
}
condition
? expr1
: expr2
如果条件为true
,则计算expr1
的值;否则,计算并返回expr2
的值。
void main() {
int a = 1;
var b = a > 2 ? 2 : 1;
print(b); // 输出 2
}
expr1 ?? expr2
expr1
非空,返回其值;否则,计算并返回expr2
的值
void main() {
var a;
var b = a ?? '123';
var c = b ?? '456';
print(b); // 输出 123
print(c); // 输出 123
}
… 和 ?..
..
可以访问实例成员和实例方法
?..
如果对象为空,保证不会对该空对象尝试任何级联操作
class Paint {
late String key;
void set(key) {
this.key = key;
}
void get() {
print('get ${this.key}');
}
}
void main() {
new Paint()
..set('a')
..get(); // 输出 get a
}