Number 类型
Number类型包括如下两类:
-
int 整型
取值范围:-253 到 253-1
-
double 浮点型
64位长度的浮点型数据,即双精度浮点型
int 和 double 类型都是 num 类型的子类。int 类型不能包含小数点。num 类型包括的操作包括:“+”,“-”,“*”,“/”,以及位移操作“>>”。num 类型有如下常用方法 abs、ceil、floor。
数值和字符串可以相互转换,代码如下:
void main() {
int r = 255; //颜色的RGB的R值
int color = 0xFFFFFFFF; //颜色值
//字符串转换成整型
var valueInt = int.parse('10');
assert(valueInt == 10);
//字符串转换成浮点型
var valueDouble = double.parse('10.10');
assert(valueDouble == 10.10);
//整型转换成字符串型
String valueString = 10.toString();
assert(valueString == '10');
//浮点型转换成字符串型
String pi = 3.1415926.toStringAsFixed(2);
assert(pi == '3.14');
}
示例中使用了 assert 关键字,当 assert 里的条件为 false 时系统会报错,进而终止程序的执行。
String 类型
Dart 的字符串是以 UTF-16 编码单元组成的序列。使用方法与 JavaScript 相似,具体用法如下:
1. 字符串表示方法
String 类型也就是字符串类型。定义例子如下:
var s1 = 'hello world';
String s2 = "hello world";
2. 字符串拼接
String 类型可以使用“+”操作,示例如下:
var s1 = 'hello ';
String s2 = "world";
var s3 = s1 + s2;
print(s3);
3. 大块文本表示方法
可以使用三个单引号或者双引号来定义 String 类型变量,在 Flutter 中专门用来表示大型文本。
4. 转义字符处理
略
5. 字符串插值处理
可以用 ${expression} 将一个表达式插入到字符串中。如果这个表达式是一个变量,可以省略 { } 。为了得到一个对象的字符串表示,Dart会调用对象的 toString() 方法。代码如下:
String name = '张三';
int age = 20;
//插入变量可以不用{}
String s1 = '$name的年龄是$age';
print(s1);
int score = 90;
//插入条件表达式必须加入{}
String s2 = '成绩${score >= 60 ? '合格' : '不合格'}';
print(s2);
只要所有的插值表达式是编译期常量,计算结果为 null 或者数值、字符串、Boolean类型的值,那么这个字符串就是编译期常量。当插件为变量是不可以组成字符串常量。
Boolean 类型
在Dart语言里,Boolean类型的值必须为true或者false。
List 类型
在Dart语言中,具有一系列相同类型的数据被称为List对象。Dart里的List对象类似JavaScript语言的数组Array对象。
定义 List
var list = [1, 2, 3];
List 对象的第一个元素的所用是0,最后一个是 list.lenght-1。
常量 List
创建常量列表,在列表字面量前加上 const 关键字即可。试图修改常量列表里的元素会引发一个错误。
var constList = const [1, 2, 3, 4];
//下一行会引发一个错误
//constList[0] = 1;
扩展运算符
扩展运算符“…”,提供了一个简洁的方法来向集合中插入多个元素。可以使用“…”来向列表中插入另一个列表的所有元素。
//数据源
var list1 = [4, 5, 6];
//使用“...”扩展了列表长度
var list2 = [1, 2, 3, ...list1];
print(list2.length);
如果扩展运算符右边的表达式可能为空,可以使用空感知的扩展运算符“…?”来避免异常。
//变量为空
var list1;
//使用“...?”先判断变量是否为空再进行扩展
var list2 = [1, 2, 3, ...?list1];
print(list2.length);
Set 类型
Set 是没有顺序且不能重复的集合,所以不能通过索引去获取值。下面是Set的定义和常用方法。
// 定义Set变量
var set = Set();
// 输出0
print(set.length);
// 错误Set没有固定元素的定义
// var testSet2 = Set(2);
// 添加整型类型元素
set.add(1);
// 添加字符串类型元素
set.add("a");
// 输出(1,a)
print(set);
// 判断是否包含此元素,输出为 true
print(set.contains(1));
// 添加列表元素
set.addAll(['b', 'c']);
// 输出(1,a,b,c)
print(set);
// 移除某指定元素
set.remove('b');
// 输出(1,a,c)
print(set);
Map 类型
通常来说,Map映射一个关联了Key和Value的对象。Key和Value都可以是任意类型的对象。Key是唯一的,但是可以多次使用相同的Value。
常用的Map有如下两种定义方式,可以不指定Key的类型。
var map1 = Map();
var map2 = {"a": "this is a", "b": "this is b", "c": "this is c"};
创建好Map对象后可以调用其方法及获取属性,如输出Map的长度,根据Key返回Value。
var map1 = Map();
var map2 = {"a": "this is a", "b": "this is b", "c": "this is c"};
// 长度属性,输出0
print(map1.length);
// 获取值
print(map2["a"]);
// 如果没有key,返回null
print(map1["a"]);
// 需要注意的是keys和values是属性而不是方法
print(map2.keys); // 返回所有key
print(map2.values);//返回所有value
Map中的Key及Value类型是可以指定的,当指定了类型之后就不能使用其他类型。
var intMap = Map<int, String>();