编写您的第一个扩展
为内置类型添加新方法
编写您的第一个扩展 是 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 反馈 — 无需本地设置。
此课程中的所有课时
- 编写您的第一个扩展
- 泛型上的扩展
- 静态扩展成员和冲突
- 实现零运行时开销包装器的扩展类型