dart:core 核心库

dart:core 是 Dart自动隐式导入的标准核心库,提供语言必备基础能力,下面按模块整理核心功能与代码示例。

也就是不需要程序员写代码导入,本身就自动导入的。

一、控制台输出

顶层函数 print(),自动调用对象 toString() 打印字符串。

void main() {
  var tea = "milk tea";
  print(tea);
  print('I drink $tea.');
}Code language: Dart (dart)

二、数值:num / int / double

  1. 继承关系:intdouble 都继承自 num
  2. 字符串转数字:parse(),int 支持进制 radix
  3. 数字转字符串:
  • 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)

通用高阶方法:forEachmapwhereanyevery

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编解码、解析、拼接链接

  1. encodeFull:仅编码空格等,保留 / : ? & 等URL符号
  2. 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:时间点,支持本地时区 / UTC
  • Duration:时间间隔,用于时间加减、计算差值
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回收
Next:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注