一、概述
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 == 0110
assert((3 >> 1) == 1); // 0011 >> 1 == 0001
assert((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 world
var num = 1;
print('${num + 1}'); // 2
字符串拼接
print('Hello' + 'world')
三引号字符串
print(
'''
Hello
world
'''
);
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); // true
print(i is num); // true
print(i is List); // false
print(i is Object); // true