Dart数据类型定义了变量可以存储的值类型,包括数字、字符串、布尔、字典、列表、映射以及其他特殊类型等。
1 数据类型
- 常用类型
- 数字(Number):
int
关键字(整型)、double
关键字(浮点型)。 - 布尔(Boolean):
bool
关键字。 - 字典(Map):键和值可以是任何类型的对象。
- 数组(List):Dart中是列表对象,大多数人称之为列表。
- 集合(Set):Dart中Set是一个元素唯一并且无序的集合。
- 字符串(String):
String
关键字,开发过程中大量使用。
- 数字(Number):
- 不常用类型
- Runes:表示字符串中的UTF-32编码字符。
- Symbol:指Dart程序中声明的运算符或标识符。
2 数字
- int整型和double浮点型,都是Number类型的子类,int类型不能包含小数点。
- 包含
+
、-
、*
、/
、%
以及位移操作等,常用的方法有abs、ceil和floor。
main() {
// int,必须是整型
int num1 = 123;
print('整型:$num1');
// double,既可以是整型,也可以是浮点型
double num2 = 123;
double num3 = 123.5;
print('浮点型:$num2');
print('浮点型:$num3');
// 运算符操作
var sum = num1 + num2;
print('运算符操作:$sum');
}
3 布尔
- 只有字面量true和false是布尔类型,这两个对象都是编译时常量。
- Dart是强布尔类型检查,只有bool类型的值是true才被认为是true。
main() {
// 布尔类型
bool flag1 = true;
print('布尔类型:$flag1');
bool flag2 = false;
print('布尔类型:$flag2');
// 条件判断语句
var flag = false;
if(flag) {
print('布尔类型:true');
} else {
print('布尔类型:false');
}
var a = 123;
var b = 456;
if(a == b) {
print('条件判断:a == b');
} else {
print('条件判断:a != b');
}
}
4 字典
- 将key和value关联在一起,也就是键值对,且key必须是唯一的。
main() {
// Map定义方式一
var person1 = {'姓名': '张三', '年龄': 21, '工作': '程序员'};
print('姓名:${person1['姓名']}');
print('方式一:$person1');
// Map定义方式二:构造函数Map()
var person2 = new Map();
person2['姓名'] = '李四';
person2['年龄'] = 22;
person2['工作'] = '设计师';
print('方式二:$person2');
}
4-1 添加获取
- 可以为Map对象添加新的键值对,通过length获取键值对的数量。
main() {
var person = {'姓名': '张三', '年龄': 21};
// 添加新的键值对
person['性别'] = '男';
print(person);
// 使用length获取键值对的数量
print('length获取到的person键值对数量:${person.length}');
}
4-2 常用属性
- keys(获取key值)、values(获取value值)、isEmpty(是否为空)、isNotEmpty(是否不空)。
main() {
// 常用属性
Map person = {'姓名': '张三', '年龄': 21, '性别': '男'};
print('键:${person.keys}');
print('值:${person.values}');
print('是否为空:${person.isEmpty}');
print('是否不空:${person.isNotEmpty}');
}
4-3 常用方法
- remove()、addAll()(映射拼接)、containsValue(查看映射内的值)。
main() {
// 常用方法
Map person = {'姓名': '张三', '年龄': 21};
person.addAll({'性别': '男'});
print(person);
person.remove('性别');
print(person);
print('是否包含“张三”:${person.containsValue('张三')}');
}
5 数组
- 具有一系列相同类型的数据,类似于JavaScript的Array数组对象。
main() {
// List定义方式一
var l1 = ['张三', 21, true];
print('List定义方式一:$l1');
print('\tList的长度:${l1.length}');
print('\tList的位置:${l1[0]}');
// List定义方式二:指定类型
var l2 = <int>[21, 23, 25, 27, 29];
var l3 = <String>['张三', '李四', '王五', '赵六'];
print('List定义方式二:$l2');
print('List定义方式三:$l3');
// List定义方式三:增加数据
var l4 = [];
print('List定义方式三:$l4');
print('\tList的长度:${l4.length}');
l4.add('孙七');
l4.add('周八');
l4.add('吴九');
l4.add('郑十');
l4.add(30);
print('List定义方式三:$l4');
print('\tList的长度:${l4.length}');
// List定义方式四:新版中已去除
// var l5 = new List();
// l5.add('张三');
// l5.add('李四');
// l5.add('王五');
// l5.add('赵六');
// l5.add('孙七');
// print('List定义方式四:$l5');
}
5-1 元素索引
- List对象的第一个元素索引是0,最后一个元素索引是
list.length-1
。
main() {
// 创建一个固定长度的集合
var l1 = List.filled(3, '');
print('固定长度的集合:$l1');
l1[0] = '张三';
l1[1] = '李四';
l1[2] = '王五';
print('固定长度的集合:$l1');
// 已固定长度,添加Unhandled exception报错
// l1.add('赵六');
// print('固定长度的集合:$l1');
// 也无法通过修改长度进行改变
// l1.length = 5;
// 该定义方式可以改变集合的长度
var l2 = ['孙七', '周八'];
l2.length = 0;
print('改变集合的长度:$l2');
var l3 = List<String>.filled(3, '');
l3[0] = '字典';
l3[1] = '布尔';
l3[2] = '数组';
print('改变集合的长度:$l3');
}
5-2 常用属性
- length(长度)、reversed(翻转)、isEmpty(为空)、isNotEmpty(不为空)。
main() {
// 常见属性
var list = ['苹果', '西瓜'];
list.add('葡萄');
print('列表:$list');
print('长度:${list.length}');
print('不空:${list.isNotEmpty}');
print('为空:${list.isEmpty}');
// 翻转后再转换成List
print('列表:${list.reversed}');
}
5-3 常用方法
- add(增加)、addAll(拼接数组)、remove(删除)、removeAt(删除)、fillRange(修改)。
- indexOf(查找,如果查找不到则返回-1)、
insert(index, value)
(指定位置插入)。 insertAll(index, list)
(指定位置插入列表)、join()
(列表转换成字符串格式)。split()
(字符串转换成列表)、toList()
(其他类型转换成列表)。
main() {
// 常用方法
List l1 = ['桃子'];
l1.add('香蕉');
l1.addAll(['葡萄', '樱桃']);
print('列表:$l1');
// 查找不到则返回-1
print('查找:${l1.indexOf('苹果')}');
l1.remove('葡萄');
print('删除“葡萄”:$l1');
l1.removeAt(1);
print('删除“香蕉”:$l1');
// 将位置(1-2]之间的数据改为'西瓜'
l1.fillRange(1, 2, '西瓜');
print('替换“樱桃”:$l1');
l1.insert(1, '杏子');
print('插入:$l1');
l1.insertAll(1, ['苹果', '龙眼']);
print('插入:$l1');
var str = l1.join('、');
print('转换:$str');
var l2 = str.split('、');
print('转换:$l2');
}
6 集合
- 最主要的功能就是去除数组中存在的重复内容。
- 无序且不能重复的集合,不能通过索引获取值。
main() {
// 给数组去重
var s = new Set();
s.add('苹果');
s.add('苹果');
s.add('苹果');
print(s);
print(s.toList());
}
7 字符串
- 字符串类型,使用单引号、双引号或三引号定义,开发中大量使用。
- 通过两种方式进行字符串的拼接:使用
$
符号,或+
符号进行操作。
main() {
// 字符串定义的几种方式
var str1 = '字符串定义方式一';
var str2 = "字符串定义方式二";
print(str1);
print('$str2\n');
String str3 = '字符串定义方式三';
String str4 = "字符串定义方式四";
print(str3);
print('$str4\n');
String str5 = '''
字符串定义方式五
字符串定义方式五
''';
String str6 = """
字符串定义方式六
字符串定义方式六
""";
print(str5);
print(str6);
// 字符串的拼接
String str7 = '你好';
String str8 = '张三';
print('拼接一:$str7,$str8');
print('拼接二:' + str7 + ',' + str8);
}
8 数据类型判断
- 使用
is
关键字来判断数据类型。
main() {
// is关键字判断数据类型
var str = '12345';
if(str is String) {
print('String类型');
} else if(str is int) {
print('int类型');
} else {
print('除String和int的其他类型');
}
}
9 数据类型转换
- 使用
parse()
将String类型转换成Number类型,toString()
将Number类型转换成String类型。 isEmpty
可以用来判断字符串是否为空,为了防止转换过程中报错,可使用try...catch
语句。
main() {
// String转Number:parse()
String str1 = '123';
var myNum1 = int.parse(str1);
print(myNum1 is int);
String str2 = '123.3';
var myNum2 = double.parse(str2);
print(myNum2 is double);
// Number转String:toString()
var myNum3 = 123;
var str3 = myNum3.toString();
print(str3 is String);
// 其他类型转Boolean类型
var str4 = '你好!';
if(str4.isEmpty) {
print('为空');
} else {
print('不空');
}
var myNum4;
if(myNum4 == null) {
print('为空');
} else {
print('不空');
}
var myNum5 = 0/0;
if(myNum5.isNaN) {
print('非数');
} else {
print(myNum5);
}
// 防止报错,使用try...catch语句
String price = '';
try {
var myNum6 = double.parse(price);
print(myNum6);
print(myNum6 is double);
} catch(err) {
print(0);
}
}