# 数据类型
基本的类型:
- 数字(number)
- 字符串(string)
- 布尔值(boolean)
- 列表(list)
- 集合(set)
- 映射(map)
- 符文(rune)
- 符号(Symbol)
# 数值型
Dart 中数字类型用于表示数字文字,Dart 中的数字类型分为整数和双精度数两种,整数值不大于64位, 具体取决于平台。
你可以使用 int / double 关键字来显式声明一个整型 / 双精度变量:
int a = 10;
int b = 0xDEADBEEF;
double c = 3.14;
double d = 1.42e5;
另外,Dart 支持自动推断数据类型,所以你也可以像JS一样使用 var 关键字来声明:
var a = 88;
var b = 5.65;
同时num也支持一些数据类型的转换:
void main() {
var age = '18';
print(age.runtimeType); //输出:String 类型
int parseAge = int.parse(age);
print(parseAge.runtimeType); //输出:int 类型
}
# 字符串
Dart字符串是UTF-16编码的字符序列,可以使用单引号或者双引号来创建字符串,单引号和双引号可以嵌套使用,否则需要使用\进行转义。
字符串中也可以引用变量与表达式,同时可以实现字符串拼接功能
import 'dart:core';
void main() {
var name = 'toimc';
print(name.runtimeType); //输出:String 类型
var newName1 = "my name is $name";
print(newName1); //输出:my name is toimc
//和上面反之,需要添加上{}
var nameName2 = "my name is ${User().name}";
print(nameName2); //输出:my name is toimc
}
class User {
var age =10;
var name ="toimc";
}
提供一个 r
前缀可以创建一个 “原始 raw” 字符串,说白了就是不需要转义(如果添加上转义字符那么将会失效)如下:
import 'dart:core';
void main() {
//r:不需要转义
print(r"换行符: \n"); //输出:换行符:\n
print("换行符: \\n"); //输出:换行符:\n
}
# 布尔型
Dart有个类型名字为bool 类型,而在Dart中只有两个对象是布尔类型:分别是true和false。在Dart中还强类型检查,只有当为true的时候才会真。
import 'dart:core';
void main() {
bool isLoading;
print('$isLoading'); //输出:null;
isLoading =true;
print('$isLoading'); //输出:true;
}
#
# 列表List
几乎所有的编程语言中数组是必不可少的,而在Dart中 list 也是必不可少的。
下面我们来看一下List一些基本用法:
- 初始化
import 'dart:core';
void main() {
var names = List();
print(names.length); //输出:0;
var names1 = List(2);
print(names1.length); //输出:2;
//如果想要为 List 添加不同数据类型的变量,则需要直接只买数据类型为Object
var names2 = List<Object>();
names2.add('toimc');
print(names2.runtimeType); //输出:List<Object> 类型
//直接复制,可以添加不同类型
var names3 = ['toimc',12,11.0];
print(names3.length); //输出:3
//在list 字面上之前添加const 关键字,可以定义一个不变的list对象(编译是常量)
var names4 = const[1,2,3];
print(names4.length); //输出:3
///如果为names4集合添加一个值如下操作,这种操作是错误,list不可变
///报错:Cannot add to an unmodifiable list
names4.add(4);
}
- 常用属性和方法
import 'dart:core';
import 'package:myfirstflutter/test/user.dart';
void main() {
var names1 = [1, 2, 3];
print(names1.length); //输出:0;
//排序
List<User> myList = [User('toimc', 23), User('小方', 61), User('小李', 48)];
myList.sort((a, b) => (b.age).compareTo(a.age));
//集合循环
myList.forEach((v) {
print('${v.name}${v.age}'); //输出:小方61,小李48,toimc23
});
//查找符合条件
var result = myList.where((v) => v.age == 23);
result.forEach((v){
//isEmpty属性,返回列表是否为空
print('${v.name}${v.age}');
});
//isEmpty属性,返回列表是否为空
print(myList.isEmpty);
//isNotEmpty属性,返回列表是否有元素
print(myList.isNotEmpty);
//获取List中的第一个元素
print("获取List中第一个元素${names1.first}");
}
- 添加数据
import 'dart:core';
void main() {
var names1 = ['小李', '小王', '小张'];
//添加数据
names1.add('李四');
print(names1.length); //输出:4;
var names2 = List(2);
///当执行add 时候会报错:Cannot add to a fixed-length list
///(固定长度的list是不能通过add添加数据)
///names2.add(1);
//固定长度的list使用一下方式可以设置数据
names2[0] = 'toimc';
names2[1] = '小方';
names2.forEach((v) {
print('$v'); //输出:toimc 小方
});
var names3 = ['小李', '小王', '小张'];
var names4 = ['1', '2', '3'];
//添加全部元素
names3.addAll(names4);
names3.forEach((v) {
print('$v'); //输出:小李 小王 小张 1 2 3
});
}
- 删除数据
import 'dart:core';
void main() {
var names1 = ['小李', '小王', '小张', '李四', 'toimc'];
//删除指定元素
names1.remove('小李');
print(names1); //输出:小王 小张 李四 toimc
//删除最后一个元素
names1.removeLast();
print(names1); //输出:小王 小张 李四
//删除指定位置元素
names1.removeAt(names1.length - 1);
print(names1); //输出:小王 小张
//删除指定位区域元素
names1.removeRange(0, 1);
print(names1); //输出 小张
//下面这个方法是将列表List中的toString只有的字符串的长度等于3的元素全部删除
names1.removeWhere((item) =>item.toString().length==3);
print('删除列表中toString后长度为3的元素:==>$names1');
}
# Map
Map和lList一样基本上只要学习开发语言map也是必不可少的一部分,特点:
Map是键值对相关的对象;
键和值可以是任何类型的对象;
每个键只出现一次, 而一个值则可以出现多次。
import 'dart:core';
void main() {
//直接声明,用{}表示。里面写key和value 每组键值对中间用逗号隔开
var names = {'name1': '小李', 'name2': '小王', 'name3': '小张'};
print(names); //输出:{name1:小李,name2: 小王, name3:小张}
var names1 = Map();
names1['name1'] = '小方';
names1['name2'] = '小李';
names1['name3'] = 'toimc';
print(names1); //{'name1': '小方', 'name2': '小李', 'name3': 'toimc'};
//限定Map 可以存储的数据类型
var names2 = <String, String>{'name': '小李'};
print(names2); //输出:{'name':'小李'}
//与list List类似,要创建一个编译时常量的Map需要在Map的字面量前加上const 关键字
var names3 = const {'name': '小李', 'age': 60};
print(names3); //输出:{'name':'小李','age' : 60}
//循环
names1.forEach((k, v) {
print(v); //输出:小方,小李。toimc
});
//查询删除
var names4 = {'name1': '小李', 'name2': '小王', 'name3': '小张'};
names4.removeWhere((k, v) => k == 'name1');
names4.forEach((k, v) {
print(v); //输出:小王,小张
});
//根据指定key 进行删除
names4.remove('name1');
//找找是否包含指定key
names4.containsKey('name2');
//找找是否包含指定value
names4.containsValue('小张');
//添加一个Map对象
names4.addAll({'name': '丘处机'});
}
Map和List一样,同样有增删改查功能