数据类型 | 声明示例 |
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(); |
- var声明与类型声明有什么区别?
Dart是比较奇怪,它综合了静态语言与动态语言的特点。
例如,dart可以和python、JavaScript等动态语言一样,可以不预先定义变量类型,直接用var声明一个变量,dart会自动识别出该变量的类型。
但是,假如你用var来赋值a为字符串,那么变量a一直只能是赋值为字符串类型。这与python和JavaScript是不同的。
所以Dart还是属于静态语言(强类型语言)。
- dart有两种方式声明常量,final与const,这两者有什么不同?
平常使用时,用法好像完全一样,实际上还有区别的。
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);