Samlss 2019-12-01
数据类型 | 声明示例 |
String | String a = "你好"; var a = "你好"; |
int | int b = 1; var b = 1; |
double | double c = 3.14; var c = 3.14; |
bool | bool d = true; |
List | var e = ["1","2","3"] List e = new List(); var e = new List<String>(); |
Map | var person = { "name":"张三", "age":20 }; var f = new Map(); |
Dart是比较奇怪,它综合了静态语言与动态语言的特点。
例如,dart可以和python、JavaScript等动态语言一样,可以不预先定义变量类型,直接用var声明一个变量,dart会自动识别出该变量的类型。
但是,假如你用var来赋值a为字符串,那么变量a一直只能是赋值为字符串类型。这与python和JavaScript是不同的。
所以Dart还是属于静态语言(强类型语言)。
平常使用时,用法好像完全一样,实际上还有区别的。
const PI = 3.14159; print(PI); final PI = 3.14159; print(PI);
但是某些使用时会有问题,例如:
final a = new DateTime.now(); print(a) // 正常打印 const a = new DateTime.now(); // 会报错
是因为const是编译时常量,在编译期间已经确定了下来。
最重要的是它是运行时常量,并且final是惰性初始化,在执行时才进行初始化。
还有一个区别需要注意:
虽然const与final修饰的常量都不可以继续被赋值。但是final修饰的常量,这个常量包含这集合,那么这个集合还是可变的。而const修饰的常量,即使这个常量包含着集合,由于const传递了不可变性,这个集合是不能进行变化的。
final list0 = [1,2,3]; list0[0] = 4; print(list0); // [4,2,3] const list1 = [1,2,3]; list1[0] = 4; // 报错 print(list1);