dart:core 是 Dart自动隐式导入的标准核心库,提供语言必备基础能力,下面按模块整理核心功能与代码示例。
也就是不需要程序员写代码导入,本身就自动导入的。
一、控制台输出
顶层函数 print(),自动调用对象 toString() 打印字符串。
void main() {
var tea = "milk tea";
print(tea);
print('I drink $tea.');
}Code language: Dart (dart)
二、数值:num / int / double
- 继承关系:
int、double都继承自num - 字符串转数字:
parse(),int 支持进制 radix - 数字转字符串:
toString():普通转换toStringAsFixed(n):保留n位小数toStringAsPrecision(n):n位有效数字
void main() {
// 字符串转数字
assert(int.parse('42') == 42);
assert(int.parse('42', radix:16) == 66);
assert(double.parse('0.5') == 0.5);
// 数字转字符串
assert(123.456.toStringAsFixed(2) == '123.46');
assert(123.456.toStringAsPrecision(2) == '1.2e+2');
}Code language: Dart (dart)
三、字符串 String & 正则 RegExp
- String 不可变(所有修改方法返回新字符串);存储 UTF-16 码元
- 常用查找、截取、分割、大小写、去除空白
void main() {
var str = 'Never odd or even';
// 查询
assert(str.contains('odd'));
assert(str.startsWith('Never'));
assert(str.endsWith('even'));
assert(str.indexOf('odd') == 6);
// 截取、分割
assert(str.substring(6,9) == 'odd');
var parts = 'a b c'.split(' ');
// 修剪、判空
assert(' abc '.trim() == 'abc');
assert(''.isEmpty);
assert(' '.isNotEmpty);
// 大小写
assert('dart'.toUpperCase() == 'DART');
// 字符串拼接优先使用 StringBuffer(性能更高)
var sb = StringBuffer();
sb.write('Hello ');
sb.writeAll(['A','B','C'], ',');
print(sb.toString());
}Code language: Dart (dart)
正则 RegExp
void main() {
var reg = RegExp(r'\d+'); // 匹配连续数字
var text = 'llamas live 15 to 20 years';
assert(reg.hasMatch(text));
// 全局匹配遍历
for(var m in reg.allMatches(text)){
print(m.group(0));
}
// 替换
var res = text.replaceAll(reg, 'XX');
print(res);
}Code language: Dart (dart)
注意:单纯码元不等于用户可见字符,复杂Unicode字符(emoji组合)推荐第三方
characters包。
四、集合(List / Set / Map)
1. List 有序、允许重复、支持下标索引
void main() {
var fruits = ['apple','orange'];
fruits.add('kiwi');
fruits.addAll(['grape']);
fruits.removeAt(0);
fruits.sort((a,b)=>a.compareTo(b)); //排序
// 泛型约束
var strList = <String>[];
}Code language: Dart (dart)
2. Set 无序、元素唯一、不能下标访问
void main() {
var set = <String>{};
set.addAll(['gold','xenon']);
set.add('gold'); //重复添加无效
assert(set.contains('xenon'));
// 交集运算
var set2 = Set.from(['xenon','argon']);
var inter = set.intersection(set2);
}Code language: Dart (dart)
3. Map 键值对集合,键唯一
void main() {
var map = {54: 'xenon'};
print(map[54]);
assert(map.containsKey(54));
map.remove(54);
// key不存在才赋值
map.putIfAbsent('name', () => 'Dart');
// 遍历
map.forEach((k,v)=>print('$k:$v'));
}Code language: Dart (dart)
4. Iterable 通用集合操作(List/Set实现Iterable)
通用高阶方法:forEach、map、where、any、every
void main() {
var list = ['green','black','chamomile'];
list.forEach(print);
// map惰性求值,toList立即执行
var upperList = list.map((e)=>e.toUpperCase()).toList();
// 筛选
var filter = list.where((e)=>e == 'chamomile');
assert(list.any((e)=>e == 'chamomile'));
assert(!list.every((e)=>e.contains('tea')));
}Code language: Dart (dart)
五、URI 地址处理(Uri)
用于URL编解码、解析、拼接链接
encodeFull:仅编码空格等,保留/ : ? &等URL符号encodeComponent:全部特殊字符转义(适合参数值编码)
void main() {
// 解析url
var uri = Uri.parse('https://example.org:8080/foo?lang=dart#frag');
print(uri.scheme);
print(uri.host);
print(uri.queryParameters);
// 构造url
var newUri = Uri.https('example.org','/foo', {'lang':'dart'});
}Code language: Dart (dart)
六、日期时间 DateTime & Duration
DateTime:时间点,支持本地时区 / UTCDuration:时间间隔,用于时间加减、计算差值
void main() {
var now = DateTime.now();
var y2k = DateTime.utc(2000);
// 时间增减
var nextYear = y2k.add(const Duration(days:366));
var diff = nextYear.difference(y2k);
print(diff.inDays);
// 时间戳(毫秒,Unix纪元1970-01-01 UTC)
print(y2k.millisecondsSinceEpoch);
}Code language: Dart (dart)
警告:夏令时场景直接使用天数偏移容易出错,优先使用UTC时间。
七、工具接口与基类
1. Comparable 实现对象比较,用于排序
class Line implements Comparable<Line> {
final int length;
const Line(this.length);
@override
int compareTo(Line other) => length - other.length;
}Code language: Dart (dart)
2. 自定义Map Key:重写 == 和 hashCode
规则:相等对象必须拥有相同hashCode
class Person {
final String first, last;
Person(this.first,this.last);
@override
int get hashCode => Object.hash(first, last);
@override
bool operator ==(Object other) =>
other is Person && other.first == first && other.last == other.last;
}Code language: Dart (dart)
- 3. Iterable + Iterator
实现 Iterable 即可支持 for-in 循环,自定义遍历逻辑。
八、异常机制
- Error:严重错误,一般不捕获(如 NoSuchMethodError)
- Exception:预期异常,可以捕获;可自定义异常
class FooException implements Exception {
final String? msg;
const FooException([this.msg]);
@override
String toString() => msg ?? 'FooException';
}Code language: Dart (dart)
九、弱引用与终结器
WeakReference:弱引用,不阻止GC回收对象Finalizer / NativeFinalizer:对象被回收后执行回调,释放本地资源Finalizable:防止对象提前被GC回收
Previous: dart:convert 库
Next: dart:io