变量
可以不预先定义变量类型,会自动类型推断
没有初始化时,默认为null(数字类型的变量也一样,因为数字在dart中也是对象)
使用final声明只赋值一次的变量
final和const
final : 只能在初始化时赋值一次,不可以修改
const : 同时也是’final’,区别在于’const’更加严格,是编译时常量.
var name = 'bob';
内建类型
Number
- int : 根据平台的不同,整数值不大于64位。
- double : 64位(双精度)浮点数
- int和double 是num的子类
int
//1 int
int a = 123;//不能赋值double类型
// a = 123.4 //'double' can't be assigned to a variable of type 'int'.
print(a);//123
double
double b = 1.2345;
print(b);//1.2345
b = 24;
print(b);//24.0
print(a.toDouble());//转换
num
num a3 = 1;
a3 = 2.2 ;
print(a3);
print(a3.floor());//向下取整
print(a3.ceil());//向上取整
a3.abs();//
转换
// String -> int
var one = int.parse('1');
assert(one == 1);
// String -> double
var onePointOne = double.parse('1.1');
assert(onePointOne == 1.1);
// int -> String
String oneAsString = 1.toString();
assert(oneAsString == '1');
// double -> String
String piAsString = 3.14159.toStringAsFixed(2);
assert(piAsString == '3.14');
字符串
字符串可以用单引号或双引号创建一个字符串
var str = "123";
//单双引号来创建
String str2 = '''第一行
第二行
第三行
''';//三个引号
可以用${expression}表达式的值放入字符串中
// 2.字符串拼接
String s1 = "hello";
String s2 = "world";
print("$s1 $s2");
print(s1+" - "+s2);
final String s3 = "123" ;
// s3 = "yuan";//Can't assign to the final variable 's3'.
print(s3);
字符串字面量是编译时常量,只要任何内插表达式都是编译时常量,计算结果为null或数值、字符串或布尔值
// These work in a const string.
const aConstNum = 0;
const aConstBool = true;
const aConstString = 'a constant string';
// These do NOT work in a const string.
var aNum = 0;
var aBool = true;
var aString = 'a string';
const aConstList = [1, 2, 3];
const validConstString = '$aConstNum $aConstBool $aConstString';
// const invalidConstString = '$aNum $aBool $aString $aConstList';//报错
print(validConstString);//0 true a constant string
Bool
true/false 只有这两个值
bool res = true;
Lists
列表类型,相当于数组
- 列表初始化
//list 列表类型,
var list = [1,2,34];
List arr = [123,321];
var ll = new List();
print(list);
- 常用操作
//常用操作
arr[0] = 100;
print(arr[0]); // 100
arr.add(300);//添加一个
arr.removeAt(1);//删除
var arr2 = const [1,2];//定义一个不可变数组
arr.indexOf(23);//-1 没有 返回下标
arr.forEach((element) {//遍历
print(element);
});
Maps
字典类型: key : value 都可以是任意类型
- 初始化
var user = {"name":"yh","age":20};
print(user);//{name: yh, age: 20}
Map dic0 = {};
print(dic0);
- 添加键值对 和 遍历
var user3 = new Map();
user3["name"] = "yh1";
print(user3);//{name: yh1}
user.forEach((key, value) {
print("key = $key value = $value");
});
如果你要获取的键不再map中,将会返回一个null.
使用.length获取map中元素的个数
Runes 字符
Runes代表字符串的UTF-32字符集
\u + 4位16进制数
笑脸表情(😆)的编码\u{1f600}.
var heart = "\u2665";
print(heart);//♥
Runes heart2 = new Runes("\u2665 \u2452");
var clapping = '\u{1f600}';
print(clapping);
print(clapping.codeUnits);
print(clapping.runes.toList());
Runes input = new Runes(
'\u2665 \u{1f605} \u{1f60e} \u{1f47b} \u{1f596} \u{1f44d}');
print(new String.fromCharCodes(input));
}
//运行效果如下
😀
[55357, 56832]
[128512]
♥ 😅 😎 👻 🖖 👍
Symbols(符号)
在反射中使用很普及 用来定义一个不会被改变的标识符,不会被混淆的名字
- 初始化
var s1 = Symbol("name");
print(s1);
var s2 = #it;
print(s2);
/*
Symbol("name")
Symbol("it")
*/