天天看点

Dart数据类型详解Number 类型String 类型Boolean 类型List 类型Set 类型Map 类型

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>();