类型
具体类型就那几个,如有错误可以现查,本文只记录不一样的东西。
声明方法
var 隐式声明
使用var并使用具体值初始化变量,编译器会自动判断是哪种类型。
dart
var name = 'Bob'; //name 变量被推断为 String显示声明
dart
String name = 'Bob';非单一类型
如果一个对象不限于单一类型, 要指定 Object 类型(或 dynamic )。
dart
Object name = 'Bob';空安全
可空变量
一言以蔽之:若允许该变量为空,则需要在类型声明后加一个?。
dart
String? name // Nullable type. Can be `null` or string.
String name // Non-nullable type. Cannot be `null` but can be string.可空类型如果没有初始化,其默认值为 null。
不可空变量
可以不初始化,但做读取操作前需要被赋值。
dart
int lineCount;
if (weLikeToCount) {
lineCount = countLines();
} else {
lineCount = 0;
}
print(lineCount);late(延迟初始化)变量
场景:你确定变量在使用之前已设置,但 Dart 推断错误的话,可以将变量标记为 late 来解决这个问题。(终端开发者给编译器擦屁股属于是)
dart
late String description;
void main() {
description = 'Feijoada!';
print(description);
}Final 和 const
这两都是赋值后不可更改的玩意儿,个人认为final的存在仅仅是为了优化那一点点可有可无的性能。
dart
void main() {
final name = 'Alice'; // 运行时常量(运行时赋值一次后不可更改)
const age = 30; // 编译时常量(编译时就固定写死的,不用多讲吧)
final timeNow = DateTime.now(); // ✅ OK
// const timeNow = DateTime.now(); ❌ 错误:运行时值不能用于 const
}list、set、map
- list就是dart的数组类型,使用[ ]包裹
- set是集合类型,无序的、不允许存在两个相同的元素,使用{ }包裹
- map则是哈希表,无需多言。