Dart 知识点 - 数据类型

语言: CN / TW / HK

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第1天,点击查看活动详情

Dart 这个知识点,会写成一个系列的文章。我们以数据类型开始~

推荐使用线上编辑器 dartpad.cn 进行学习,测试~

dartpad线上测试.png

Number 数字类型

  • Number 数字类型,包含
  • int 整型
  • double 浮点型

intdouble 都是 num 的子类。

```bash int a = 1; print(a); // 1

double b = 2.0; print(b); // 2.0

num c = -3; print(c); // -3 ```

String 字符串类型

Dart 支持使用双引号和单引号来创建字符串。使用 String 来定义变量,表明该变量是字符串类型。Dart 中字符串类型的使用跟 JavaScript 中字符串的使用相似:

字符串拼接

使用 + 符号进行拼接

bash String s1 = 'Hello '; String s2 = 'World!'; String s3 = s1 + s2; print(s3); // Hello World!

转义字符处理

使用 \ 来表示

```bash String s1 = 'I\'m Jimmy.' print(s1); // I'm Jimmy.

String s2 = "第一行文本\n第二行文本"; print(s2); // 第一行文本 // 第二行文本 ```

多行文本

我们可以使用 ''' 或者 """ 来表示,比如上面的 "第一行文本\n第二行文本" 我们可以这样写:

bash ''' 第一行文本 第二行文本 ''' // 或者 """ 第一行文本 第二行文本 """

字符串插值

在字符串中,我们使用 ${表达式} 的形式使用表达式

bash String s1 = 'my name is Jimmy.'; print('Hello, ' + s1); // Hello, my name is Jimmy. print('Hello, ${ s1 }'); // Hello, my name is Jimmy. print('Hello, ${ s1.substring(10, 1) }!'); // Hello, Jimmy.

Boolean 布尔类型

我们先来看下下面的代码:

bash String str = ''; if(str) { print('true'); } else { print('flase'); }

那上面的代码会打印什么呢?true 或者 false 呢?

上面的代码会报错:

bash Error: A value of type 'String' can't be assigned to a variable of type 'bool'. if(str) { ^ Error: Compilation failed.if(str) 这里,编译失败,因为在 dart 语言里面,变量值必须是 true 或者 false 才行。改写下上面的代码:if(str) => if(str.isEmpty) 即可通过编译。

所以读者不要把 JavaScript 判断布尔值的方式带过来 Dart 这里编写:

| | JavaScript (false) | Dart (true) | | --- | --- | --- | | var variable = 0 | variable (false) | variable <= 0 (true) | | var variable = null | variable (false) | variable == null (true) | | var variable = '' | variable (false) | variable.isEmpty (true) | | var variable = NaN | variable (false) | variable.isNaN (true) | | var variable = true | variable (true) | variable (true) |

所以,你直接定义布尔类型变量的时候,正确的姿势应该是这样:

bool flag = true // 或者 bool flag = false

list 数组类型

这里的 list 我理解成数组,因为这跟 JavaScript 里面的 array 很类似~

bash List arr = ['Hello ', 'World!']; // 数组的长度 print(arr.length); // 2 // 数组的取值 print(arr[0]); // Hello // 数组的赋值 arr[1] = 'Jimmy. '; print(arr.join('')); // Hello Jimmy. // 扩展运算符 var list = ["I\'m ", 'come ', 'from ', 'China.']; print([...arr, ...?list].join('')); // Hello Jimmy. I'm come from China.

...? 为空感知扩展操作符,如果扩展操作符右边的变量值可能是 null, 我们可以使用 ...? 来避免产生异常

Set 集合类型

集合有三个特性;

  • 无序性:每个元素的地位都是相同的,元素之间无序。
  • 互异性:每个元素只能出现一次。
  • 确定性:给定一个集合,任何一个元素,该元素或者属于或者不属于该集合,二者必居其一,不允许模棱两可的情况出现。

使用如下:

bash // 定义集合 Set set = new Set(); // 集合的大小 print(set.length); // 0 // 添加元素 set.add('Hello '); set.add('World!'); print(set); // {Hello , World!} // 判断集合中是否存在指定元素 print(set.contains('Jimmy')); // false // 一次添加多个列表元素 set.addAll(["I\'m ", 'come ', 'from ', 'China.']); print(set); // {Hello , World!, I'm , come , from , China.} // 移除指定的元素 set.remove('World!'); print(set); // {Hello , I'm , come , from , China.}

Map 对象类型

Map 理解成对象,是因为这跟 JavaScript 中的对象很类似。

bash // 定义对象 Map map = new Map(); // 对象的大小 print(map.length); // 0 // 添加对象属性 map['name'] = 'Jimmy'; map['country'] = 'China'; print(map); // {name: Jimmy, country: China} // 读取属性值 print(map['name']); // Jimmy // 读取对象的 keys 值 print(map.keys); // (name, country) // 读取对对象的 values 值 print(map.values); // (Jimmy, China)

Runes 和 Symbols

Dart 中,runes 公开了字符串的 Unicode 码位。Symbol 表示 Dart 中声明的操作符或者标识符。

因为这两个使用较少,这里就不进行介绍。后面需要使用到再补充...

补充

不知道读者有没有留意到,我定义变量的时候有时候也用到了 var,那么它究竟是什么呢?

varDart 语言使用的关键字,是 variable 的简写,表明这是一个泛型调用(generic invocations)

bash var name = 'Jimmy'; // 泛型调用,表明变量类型不知道是啥 String name = 'Jimmy'; // 类型注释,表明我一定是 String 类型

当然,还有 constfinal 的使用。

如果读者觉得文章还可以,不防一键三连:关注➕点赞➕收藏