声明变量的方式:
var : 【编译期】确定【变量类型】
dynamic : 【运行期】确定【变量类型】
bool
int
double
String
List
Map
注意:
1.所有未初始化的变量的初始值为null。这是因为Dart将所有值都视为对象
2.var实际上是编译期抛给我们的“语法糖”,一旦被编译,
编译期会自动匹配var 变量的实际类型,并用实际类型来替换该变量的申明,
这看上去就好像我们在编码的时候是用实际类型进行申明的。
而dynamic被编译后,实际是一个 object类型,
只不过编译器会对dynamic类型进行特殊处理,
让它在编译期间不进行任何的类型检查,而是将类型检查放到了运行期。
main() {
var a = 10;
print(a);//10
// a = "dart"; //写法错误
dynamic b = 20;
print(b); //20
b = "JavaScript"; //正确
print(b); //JavaScript
var list = new List<dynamic>();
list.add(1);
list.add("hello");
print(list);//[1, hello]
}
声明常量的方式:
final :【运行期】确定【常量值】
const :【编译期】确定【常量值】
注意:
1.final必须初始化,只能赋值一次,且不能修改值,赋值可以是常量也可以是变量。
const必须初始化,只能赋值一次,且不能修改值,赋值必须是常量。
2.const必须根据可在编译时计算的数据创建它们。
const对象无法访问运行时需要计算的任何内容。
1+2是一个合法的const表达式,但new DateTime.now()不是(合法的const表达式)
3.使用const关键字声明的变量是隐式final的。
可以把const 常量赋给 final 变量,反过来不可以。
4.final和const可以与变量的数据类型一起使用,也可以与 var 关键字一起使用。
Dart编程数据类型示例:
main() {
// numbers
var a = 0;
int b = 1;
double c = 0.1;
// strings
var s1 = 'hello';
String s2 = "world";
// booleans
var real = true;
bool isReal = false;
// lists
var arr = [1, 2, 3, 4, 5];
List<String> arr2 = ['hello', 'world', "123", "456"];
List<dynamic> arr3 = [1, true, 'haha', 1.0];
// maps
var map = new Map();
map['name'] = 'zhangsan';
map['age'] = 10;
Map m = new Map();
m['a'] = 'a';
//runes,Dart 中 使用runes 来获取UTF-32字符集的字符。
//String的 codeUnitAt and codeUnit属性可以获取UTF-16字符集的字符
var clapping = '\u{1f44f}';
print(clapping); // 打印的是拍手emoji的表情
// symbols
print(#s == new Symbol("s")); // true
}