0Pricing
Dart Academy · 课时

编写您的第一个扩展

为内置类型添加新方法

编写您的第一个扩展 是 CoddyKit 上的免费 Dart Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Dart Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Dart Academy 课程共包含 4 节课。

无法添加的方法

您是否曾希望 整数类型 有一个实用的方法,而它恰恰没有?您无法编辑内置类,但 Dart 提供了另一种方式。

认识扩展

扩展可以在不继承子类或修改源代码的情况下,给现有类型添加新方法。🎁

extension on String {
  // new methods go here
}

基本结构

您可以写出 extension 名称 on 类型,然后在花括号中添加方法。名称由您决定,类型则是您要扩展的对象。

extension NumberParsing on String {
  int doubled() => int.parse(this) * 2;
}

this 表示接收者

在扩展中,this 指的是调用该方法的值,就像在普通类方法中一样。

extension on int {
  int squared() => this * this;
}

像真正的方法一样调用

定义之后,您的方法会感觉非常原生。您可以使用点号调用它,就像调用该类型自带的方法一样。

print(5.squared()); // 25

添加 getter,而不是方法

扩展也可以添加 getter。去掉括号,您就能像读取属性一样简洁地读取任意值。

extension on int {
  bool get isEven2 => this % 2 == 0;
}
print(4.isEven2);

扩展是静态的

解析会根据静态类型在编译时进行。运行时完全不会改变原始类。

命名是可选的

您甚至可以编写未命名扩展。它仍然有效,但命名后,您可以在需要时将其隐藏或导入。

extension on double {
  String money() => "$" + toStringAsFixed(2);
}

每个扩展只表达一个想法

将相关辅助功能归入一个明确的名称下。小巧且命名清晰的扩展,比一个什么都塞进去的庞大扩展更易读。

extension StringCasing on String {
  String shout() => toUpperCase() + "!";
}

无法添加字段

扩展可以添加方法和 getter,但不能添加新的实例字段。原始对象没有位置存储这些字段。

为什么它很强大

扩展无需包装类,就能提供易读且容易发现的辅助功能。您的常用类型可以获得应用真正需要的词汇。

快速检查

让我们检查一下扩展的核心语法。

回顾:您的第一个扩展

您已经学会:对类型进行扩展可以为现有类型添加方法和 getter,使用 this 表示接收者,并且采用静态解析。🚀

常见问题解答

「编写您的第一个扩展」课时是免费的吗?

是的 — 「编写您的第一个扩展」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Dart Academy 课程的其余内容,请升级到 CoddyKit PRO。 Dart Academy 课程共包含 4 节课。

「编写您的第一个扩展」这节课中我会学到什么?

为内置类型添加新方法 你通过在浏览器中直接运行的动手代码来练习 Dart Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Dart Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Dart Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「编写您的第一个扩展」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Dart Academy 课中编写并运行代码吗?

能。每节 Dart Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 编写您的第一个扩展
  2. 泛型上的扩展
  3. 静态扩展成员和冲突
  4. 实现零运行时开销包装器的扩展类型
← 返回 Dart Academy