喜迎
春节

数据类型


Dart数据类型定义了变量可以存储的值类型,包括数字、字符串、布尔、字典、列表、映射以及其他特殊类型等。

1 数据类型

  • 常用类型
    • 数字(Number):int关键字(整型)、double关键字(浮点型)。
    • 布尔(Boolean):bool关键字。
    • 字典(Map):键和值可以是任何类型的对象。
    • 数组(List):Dart中是列表对象,大多数人称之为列表。
    • 集合(Set):Dart中Set是一个元素唯一并且无序的集合。
    • 字符串(String):String关键字,开发过程中大量使用。
  • 不常用类型
    • 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);
  }
}

文章作者: bsf
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明来源 bsf !
评 论
  目录