一、概述
Dart 内置支持下面这些类型:
- numbers
- int 整数值,其取值通常位于 -253 和 253 之间。
- double (64-bit 双精度) 浮点数,符合 IEEE 754 标准。
- strings
- booleans
- lists (也被称之为 arrays)
- maps
- runes (用于在字符串中表示 Unicode 字符)
- symbols
二、数字
参考 int,double 和 num 的相关 API 文档。 也可参考 dart:math section。
创建数字:
// 整数var x = 1;var hex = 0xDEADBEEF;var bigInt = 34653465834652437659238476592374958739845729;// 浮点数var y = 1.1;var exponents = 1.42e5;
位移操作符
assert((3 << 1) == 6); // 0011 << 1 == 0110assert((3 >> 1) == 1); // 0011 >> 1 == 0001assert((3 | 4) == 7); // 0011 | 0100 == 0111
字符串转换为数字
通过 parse 将字符串转换为数字:
assert(int.parse('42') == 42);assert(int.parse('0x42') == 66);assert(double.parse('0.50') == 0.5);assert(num.parse('42') is int);assert(num.parse('0x42') is int);assert(num.parse('0.50') is double);
带进制转换:通过添加 radix 参数,指定整数的进制基数
assert(int.parse('42', radix: 16) == 66);assert(int.parse('22', radix: 10) == 22);
数字转换为字符串
通过 toString 方法将数字转换为字符串。
// 整型转换为字符串类型。assert(42.toString() == '42');// 双浮点型转换为字符串类型。assert(123.456.toString() == '123.456');// 指定小数点后的位数。assert(123.456.toStringAsFixed(2) == '123.46');// 指定有效数字的位数。assert(123.456.toStringAsPrecision(2) == '1.2e+2');assert(double.parse('1.2e+2') == 120.0);
三、字符串
参考 string。 另请参考 StringBuffer, Pattern, RegExp, 和 Match 的 API 文档。
字符串是不可变的对象,也就是说字符串可以创建但是不能被修改。 所有针对字符串进行处理的方法都是返回一个新的字符串。
创建字符串
字符串可以使用单引号或双引号包裹
字符串插值
var s = 'world';print('Hello $s'); // Hello worldvar num = 1;print('${num + 1}'); // 2
字符串拼接
print('Hello' + 'world')
三引号字符串
print('''Helloworld''');
Raw字串
print(r"In a raw string, even \n isn't special."); // \n 将不会触发换行
搜索
// 检查一个字符串是否包含另一个字符串。assert('Never odd or even'.contains('odd'));// 一个字符串是否以另一个字符串为开头?assert('Never odd or even'.startsWith('Never'));// 一个字符串是否以另一个字符串为结尾?assert('Never odd or even'.endsWith('even'));// 查找一个字符串在另一个字符串中的位置。assert('Never odd or even'.indexOf('odd') == 6);
截取
// 抓取一个子字符串。assert('Never odd or even'.substring(6, 9) == 'odd');
拆分
通过 split 将字符串拆分为列表
// 使用字符串模式分割字符串。var parts = 'structured web apps'.split(' ');assert(parts.length == 3);assert(parts[0] == 'structured');
字符串本身也是可以通过下标索引的
// 通过下标获取 UTF-16 编码单元(编码单元作为字符串)。assert('Never odd or even'[0] == 'N');
使用 split() 传入一个空字符串参数,得到一个所有字符的 list 集合
for (var char in 'hello'.split('')) {print(char);}
获取一个字符串的所有 UTF-16 编码单元。
var codeUnitList = 'Never odd or even'.codeUnits.toList();assert(codeUnitList[0] == 78);
转换
通过 toUpperCase 和 toLowerCase 进行大小写转换
// 转换为首字母大写。assert('structured web apps'.toUpperCase() == 'STRUCTURED WEB APPS');// 转换为首字母小写。assert('STRUCTURED WEB APPS'.toLowerCase() == 'structured web apps');
去空串
通过 trim 去除字符串收尾的空字符串
// Trim a string.assert(' hello '.trim() == 'hello');// 检查字符串是否为空。assert(''.isEmpty);// 空格字符串不是空字符串。assert(' '.isNotEmpty);
替换
字符串查找替换:
var str = 'Hello, NAME! NAME!';var greeting = str.replaceAll('NAME', 'Xiaoyu'); // var str = 'Hello, NAME! NAME!';
正则查找替换:
var str = 'Hello, NAME! NAME!';var greeting = str.replaceAll(RegExp('NAME'), 'Xiaoyu'); // var str = 'Hello, NAME! NAME!';
四、列表和数组
参考:List
列表和数组,或称为有序集合,下标从0开始
var list = [1, 2, 3];assert(list.length == 3);assert(list[1] == 2);list[1] = 1;assert(list[1] == 1);
在 list 字面量之前添加 const 关键字,可以 定义一个不变的 list 对象(编译时常量):
var constantList = const [1, 2, 3];
相关内容:
📃 集合类
五、字典
参考:Map
var gifts = {'first' : 'partridge','second': 'turtledoves','fifth' : 'golden rings'};var nobleGases = {2 : 'helium',10: 'neon',18: 'argon',};var gifts = new Map();gifts['first'] = 'partridge';gifts['second'] = 'turtledoves';gifts['fifth'] = 'golden rings';var nobleGases = new Map();nobleGases[2] = 'helium';nobleGases[10] = 'neon';nobleGases[18] = 'argon';
如果所查找的键不存在,则返回 null:
var gifts = {'first': 'partridge'};assert(gifts['fifth'] == null);
使用 .length 来获取 map 中键值对的数目:
var gifts = {'first': 'partridge'};gifts['fourth'] = 'calling birds';assert(gifts.length == 2);
同样使用 const 可以创建一个 编译时常量的 map:
final constantMap = const {2: 'helium',10: 'neon',18: 'argon',};// constantMap[2] = 'Helium'; // Uncommenting this causes an error.
相关内容:
语雀内容
空值检测
针对不同类型的值,有不同的检测方法
// Check for an empty string.var fullName = '';assert(fullName.isEmpty);// Check for zero.var hitPoints = 0;assert(hitPoints <= 0);// Check for null.var unicorn;assert(unicorn == null);// Check for NaN.var iMeantToDoThis = 0 / 0;assert(iMeantToDoThis.isNaN);
类型判断
通过 is 关键字可以判断变量属于什么类型(或属于某个类):
var i = 0;print(i is int); // trueprint(i is num); // trueprint(i is List); // falseprint(i is Object); // true
