
1.2 Dart语言核心
Dart属于强类型语言,其中var、dynamic用来声明动态类型变量,与JavaScript、Kotlin、Java10中的var等语言类似。与JavaScript不同的是在Dart中var一旦指定类型后,后期是不能再次修改类型的,dynamic关键字声明的数据类型与JavaScript中的一致。先看一段JavaScript代码。

在上述JavaScript代码中var声明的变量类型可在后期随赋值类型的修改而改变。在Dart中关键字dynamic声明的类型与JavaScript中var声明的类型一致,代码描述如下。

在Dart中,使用var是不允许像JavaScript中使用var一样修改关键字类型的,如下代码在Dart中直接使用会直接编译报错提示,如图1-1所示。


图1-1 Dart中var动态类型报错提示说明图
Dart中number类型分为int和double。Dart中没有float类型。Dart中的bool类型相当于Java中的boolean与Objective-C中的BOOL。
Dart中的变量声明方式如下。

如下测试函数中使用UserBean中的变量:

1.2.1 Dart方法函数
在Dart语言中定义方法的方式与其他语言类似,方法定义格式如下。

在Java中,方法名称一样但是参数不一样,被称为方法的重载,在Java中写法如下。

在Dart中定义方法的重载,一个方法就可达到效果,代码如下。

上述声明的test1方法在使用时直接调用test1()或者test1(“张三”),还可使用Objective-C的方式来声明变量名称以调用test1(name:“张三”),这种以变量名称显示的调用方法定义代码如下。

在Dart中也有箭头函数,上述的test1方法简写成箭头函数代码如下。

1.2.2 Map、List、Set的基本使用
Map用来存储对象类型的数据,List与Set用来存储数组类型的数据,本小节主要介绍Map、List、Set中数据的添加、修改、循环遍历查询。
Map用来保存key-value(键值对)的数据集合,分为HashMap(无序)、LinkedHashMap(有序)、SplayTreeMap(查询快)。Map的创建实例如下。

在实际项目中结合数据创建Map实例,创建一个空Map的代码如下。

创建有一个有初始值的Map,代码如下。

根据List数据来创建Map,代码如下。

对于Map来讲,初始化创建时可以赋值也可以是空的。在实际开发中,当创建可变的Map数据集合时,往往会根据不同的操作来修改不同的数据,代码如下。

然后获取Map中的数据,操作如下。

List与Set都是用来存储数组类型数据,区别是Set不可保存重复数据,也就是说Set中的数据具有唯一性。在这里只分析List,Set与List的使用方法一致。代码如下。

获取List中数据的方法也比较多,如下是获取List中单个元素值(获取List中指定位置的值)的基本方法。

查找List中的元素:

循环遍历List中的数据:

List数据结构转Map数据结构:

随机排列List中的数据顺序:

升序排列List中的数据:

合并List中的数据:

1.2.3 Dart中的流程控制
(1)for循环

(2)while循环

(3)do-while循环


(4)if-else逻辑判断

(5)三元运算符(?:)

(6)switch-case选择语句
