
2.1 基本类型的操作
Dart内置基本数据类型主要包括:数值型-num、布尔型-boolean、字符串-String、列表-List、键值对-Map、dynamic型等,本章将介绍Dart的主要数据类型。其语法和用法与Java类似,但要比Java更加简便。
2.1.1 数值型数据
Dart数值类型(num)只有两种:int类型和double类型。其中int的表示范围是-253~253,double类型则是64位的双精度浮点数。
1.数据声明
数值类型数据声明很简单,语法类似Java,具体示例代码如例2-1所示。
【例2-1】 基本数据类型数据声明

编译并运行程序结果如图2-1所示。

图2-1 数值类型数据声明运行结果
注意:没有初始化的变量默认值为null。数值类型变量的默认值也是null。
2.运算符操作
数值类型常用运算符有:+、-、*、/、~/、%,这些操作都与Java操作符相似。示例代码如例2-2所示。
【例2-2】 num常用运算符

编译并运行程序结果如图2-2所示。

图2-2 数值类型运算符操作运行结果
3.常用属性
数值类型常用属性有isNaN、isEven、isOdd、isFinite、isNegative等,isNaN判断是否为数值;isEven判断是否为偶数;isOdd判断是否为奇数、isFinite判断是否为有限的数值、isNegative判断是否为负数。示例代码如例2-3所示。
【例2-3】 num常用属性

编译并运行程序结果如图2-3所示。

图2-3 数值类型常用属性运行结果
4.常用方法
数值型对象常用方法有:abs()、round()、floor()、ceil()、toInt()、toDouble()等。abs()表示求绝对值;round()表示四舍五入;floor()表示不大于的最大整数;ceil()表示不小于的最小整数;toInt()表示转化成int类型;toDouble()表示转化为double类型。示例代码如例2-4所示。
【例2-4】 num常用方法

编译并运行程序结果如图2-4所示。

图2-4 数值类型常用方法运行结果
2.1.2 布尔类型
boolean(布尔类型)只有true和false两个值,不能使用其他值,但需要注意的是布尔类型的默认值是null。示例代码如例2-5所示。
【例2-5】 布尔类型


编译并运行程序结果如图2-5所示。

图2-5 布尔类型运行结果
● var声明变量,可以赋予不同数据类型的值,var未初始化时默认值是null。
● $+变量名可以计算字符串中变量的值,后面在字符串部分讲解。
2.1.3 字符串
字符串包括字符串的声明、运算、常见属性和方法。
1.字符串的声明
Dart语言的字符串使用单引号、双引号和三引号表示,单引号或双引号都可以来表示字符串,三引号可以创建多行字符串,字符串可以进行拼接。示例代码如例2-6所示。
【例2-6】 字符串声明

编译并运行程序结果如图2-6所示。

图2-6 字符串声明运行结果
注意:Dart语言中$或${}用来计算字符串中变量的值,也称为插值表达式。
2.字符串的运算
字符串常见的运算有:+,*,==,[],示例代码如例2-7所示。
【例2-7】 字符串运算

编译并运行程序结果如图2-7所示。

图2-7 字符串运算运行结果
3.字符串的常见属性和方法
字符串常见的属性有:length、isEmpty、isNotEmpty。length表示字符串长度属性,isEmpty判断字符串是否为空,isNotEmpty判断字符串是否非空。常见的方法有:contains()、substring()、startsWith()、endsWith()、toLowerCase()、toUpperCase()、trim()、trimLeft()、split()等。使用r创建原始raw字符串。示例代码如例2-8所示。
【例2-8】 字符串常见属性和方法


编译并运行程序结果如图2-8所示。

图2-8 字符串常见属性和方法运行结果
运行结果需要注意下面几点:
● ${}表示字符串插值表达式,${m+n}表示运算m+n变量的值。
● r''表示表示原始字符串,即“所见即所得”。
2.1.4 列表
列表类似于数组的概念,包括列表的创建、列表的属性和方法。
1.列表的创建
列表即为数组,列表创建有三种方式,下面介绍列表的创建,示例代码如例2-9所示。
【例2-9】列表的创建


编译并运行程序结果如图2-9所示。

图2-9 列表的创建运行结果
运行结果需要注意下面几点:
● 通过var和[]可以创建列表,列表类似于Java中的数组。
● 第二种方法中使用const关键字,表示常量,无法修改,如果修改,编译将无法通过。
● 列表从0开始索引,list1[2]代表第三个元素。
2.列表的属性和方法
列表的操作方式有添加元素、删除元素、截取列表等操作,下面介绍列表的操作中的属性和方法,示例代码如例2-10所示。
【例2-10】 列表的属性和方法


编译并运行程序结果如图2-10所示。

图2-10 列表的属性和方法运行结果
运行结果需要注意下面几点:
● insert()指定位置插入元素。
● indexOf()返回字符串所在位置,如果在list中找不到该元素,则返回-1。
● sublist(index1,index2)第一个参数表示截取list的开始位置,第二个参数为可选参数,表示截取的结束位置。
● list.forEach(print)表示遍历打印,for....in也可以遍历列表。
● 如果列表里面有多个相同的元素“X”,只会删除集合中第一个该元素。
2.1.5 Map类型
一般来说,Map是将键和值相关联的对象。键和值都可以是任何类型的对象。
每个键只出现一次,但可以多次使用相同的值。Dart支持Map由Map文字和Map类型提供。
1.Map的声明
初始化Map可以直接声明,用{}表示,里面写key和value,每组键值对中间用逗号隔开;也可以先声明,再赋值。具体示例代码如例2-11所示。
【例2-11】 Map的声明


编译并运行程序结果如图2-11所示。

图2-11 Map的声明运行结果
运行结果需要注意下面几点:
● map.keys、map.values、map.length是Map的属性,分别是取Map的键、值和Map的长度。
● Map的键值可以是任何类型。
● Map取值和列表相似,可以通过赋值进行修改,Map中const值无法修改。
2.Map的常用方法
Map的API中会有一些常用方法,具体使用和列表比较相似,而且支持列表和Map的转换。具体示例代码如例2-12所示。
【例2-12】 Map的常用方法

编译并运行程序结果如图2-12所示。

图2-12 Map的常用方法运行结果
2.1.6 dynamic类型
dynamic代表动态类型,dynamic类型具有所有可能的属性和方法。Dart语言中函数方法都有dynamic类型作为函数的返回类型,函数的参数也都有dynamic类型。函数在后面章节中会具体介绍。示例代码如例2-13所示。
【例2-13】 dynamic类型示例

编译并运行程序结果如图2-13所示。

图2-13 dynamic类型运行结果