1、数字(num、int、double)
1.1 num 类型
num类型是数字类型的父类,他即可以接受 整型 也可以接受 浮点型
void _numType() {
num num1 = -0.1; //num 是数字类型的父类
num num2 = 1; //即可以是浮点类型也可以是整型
}
1.2 int 类型
int 是num的子类,只能接收整数
void _numType() {
int int1 = 3; //只能是整数
}
1.3 double 类型
double 也是 num的子类
void _numType() {
double d1 = 3.14; //双精度
}
num 常用的API
- abs() 绝对值
- toDouble() 转换为 double 类型
- toInt() 转换为 int 类型
- round() 四舍五入
void _numType() {
num num1 = -0.1; //num 是数字类型的父类
num num2 = 1; //即可以是浮点类型也可以是整型
int int1 = 3; //只能是整数
double d1 = -3.14; //双精度
print("num:$num1 num2:$num2 int:$int1 double:$d1");
print(num1.abs());//求绝对值
print(num1.toDouble());//转成 double 类型
print(d1.toInt());//转成Int类型
print(d1.round());//四舍五入 -3.5->-4 3.5->4 3.4->3
}
输出结果:
num:-0.1 num2:1 int:3 double:-3
0.1
-0.1
-3
-3
2、字符串(String)
在 dart 中字符串也是可以用 单引号 或者 双引号 来表示字符串的,字符串的拼接使用 '+' 或者使用 '$' (使用这个后面也是可以跟着表达式的)
//字符串类型
void _stringType() {
String str1 = '单引号', str2 = "双引号";
String str3 = 'str1:' + str1 + ' str2:' + str2;
String str4 = "str1:$str1 str2:$str2"; //还可以使用 ${}
print(str3);
print(str4);
}
String 常用的数据类型
String 字符串的Api和java中的String基本上是差不多的
- substring() 字符串截取
- replaceAll() 替换所有配置的字符
- startsWith() 判断是否以 某个字符开始,注:这个方法的第二个参数表示从第几个字符开始
- contains() 判断是否包含某个字符串,这个也是有第二个参数index的,同startsWith()一个道理
等等
将字符串转成数字类型
String str6 = "12s";
print(num.tryParse(str6) ?? 0); //如果字符串没有问题就正常转换,如果不能正常转换就会返回 0
print(num.parse(str6));//会报错
3、布尔(bool)
在dart中布尔类型使用 bool
//布尔类型
void _boolType(){
bool success = true, fail = false;
debugPrint("${success||fail}"); // true
debugPrint("${success&&fail}"); // false
}
4、集合(List、Map)
4.1 List 集合
先来看看 dart 语言中的集合是如何创建的?
集合的创建可以使用 [ ] 和 generate()
方法,同时还要注意 List 的泛型,没有泛型的List可以暂时理解为 Object(其实是 dynamic
类型)
在Dart中的 List 是继承自 Iterable 的
//集合 List类型
void _listType() {
//集合的初始化
List<String> list = ["a", "b", "c"]; //初始化并添加元素,这里设置了泛型所以只能添加string类型
List list2 = [1, 2, 3, "abc", "cde"]; //这里没有设置泛型所以添加任何类型的都可以
debugPrint(list2.toString());
debugPrint(list.toString());
// list = list2;会报错,因为 list2 没有指定泛型那么他可以放的类型是dynamic(动态)的
// list2=list; 这个不会报错
//集合生成函数 generate() ,第一个参数是长度,第二个是一个高阶函数返回值是元素
List list4 = List.generate(10, (index) => index + 1);
}
List 常用的Api
-
addAll(Iterable<E> iterable) 添加一个集合,如
list2.addAll(list)
,将 list 的所有元素加入到 list2 中,注意 list2 的泛型是dynamic
类型 -
insert(int index, E element) 从指定的下标处插入一个元素
-
sublist(int start, [int? end]) 从一个List中截取一个集合
List list5 = list2.sublist(0,3);
并不会改变原有(list2)的集合 -
indexOf(E element) 获取元素的下标,如果集合中没有此元素则返回-1
-
contains(Object? element) 是否包含此元素
-
remove(Object? value) 删除一个元素
-
removeLast() 删除最后一个元素并返回最后删除的元素
-
removeRange(int start, int end) 删除从下标start到 end之间的元素
-
removeWhere(bool test(E element)); 当表达式为true时删除元素
List 遍历
//使用 in 关键字
for (var element in list2) {
debugPrint(element.toString());
}
// forEach() 方法
list2.forEach((element) {
debugPrint(element.toString());
});
//普通的遍历方式
for (int i = 0; i < list2.length; i++) {
debugPrint(list2[i].toString());
}
4.2 Map 集合
创建方式和List差不多 Map的创建使用 { } ,它也是可以有泛型或者没有泛型的
//Map集合的创建,同样的如果不添加泛型默认的泛型是 dynamic
Map map = {"a": 1, "b": 2, 3: "c"};
Map<int, String> map2 = {1: "a", 2: "b"};
Map map3 = {}; //空的Map集合
// 添加元素
map["d"] = 4;
添加元素使用 map["d"] = 4;
Map 常见的Api
- remove(Object? key) 删除Key所对应的元素
- removeWhere(bool test(K key, V value)) 如果表达式成立则删除元素
- containsKey(Object? key) 是否包含 key
- containsValue(Object? value) 是否包含 value
还有下面几个觉的属性
- values
Iterable<V> get values;
是一个Iterable 的类型(List就是继承了这个类型) - keys
Iterable<K> get keys;
- isEmpty
bool get isEmpty;
是否为空, 空:true 不为空:false - isNotEmpty
bool get isNotEmpty;
是否不为空。空:false。不为空:true
Map 的遍历
//使用forEach 遍历
map.forEach((key, value) {
debugPrint("key:$key value:$value");//打印
});
//使用 Map.keys(返回的是一个数组)
for (var key in map.keys) {
debugPrint("key:$key value:${map[key]}");
}
5、var(任何数据类型、运行时数据类型)
dynamic 、var、Object 类型
5.1、dynamic 数据类型
这个是 dart 中的 动态数据类型,通常我们并不直接使用他,为什么?看看他的优点和缺点就知道了
-
优点: 可以代替任何的数据类型.如果我们某个对象只有在运行的时候才会知道他的数据类型使用他就可以
-
缺点:它会关闭语法检查,或者着语法检查不到 dynamic 类型的错误。 因为dart是静态的语法检查。而且他是动态的所以肯定没有静态的类型性能要高。
// dynamic 动态数据类型
//优点:可以代替任何数据类型(比如某个变量只有在运行的时候才会知道他的类型)
// 缺点:会使dart的语法检查失效,因为他是表态的语法检查
dynamic a;
debugPrint("类型:${a.runtimeType}");//类型:Null
a=1;
debugPrint("类型:${a.runtimeType}");//类型:int
a = "";
debugPrint("类型:${a.runtimeType}");//类型:String
a = Object();
debugPrint("类型:${a.runtimeType}");//类型:Object
//a.abc();//会关闭类型检查,这里的abc()是随便写的一个方法,并且编译器不会报错
5.2、var 关键字
注意 var 是关键字,并不是数据类型,那个var 关键字是什么时候确认类型的呢?
它是在 声明变量赋值的那一刻,就决定了它是什么类型.什么意思呢?看下面的两种写法。
// 情况一:
var b = "abc";//在这确定了他的类型
// b = 123;//报错,因为在声明 b 的时候就已经给他赋值了"abc" 是 String类型的
//情况二:
var c;//这里确定了类型。并没有给他赋值,他现在的类型是Object ,值是 null ,所以下面给他赋什么值都是可以接收的
debugPrint(c.toString());
c ="abc";
c = 123;
5.3、 Object 类型
他是Dart对象的基类
//Object 类型
Object o1="";
o1 = 1;
o1.abc();//这里语法检查是会报错的,因为Object没有abc()方法
网友评论