常量构造函数
本课属于 Coddy Dart 学习旅程的“面向对象编程”单元。第 13 课,共 110 课。
常量构造函数会创建编译时常量对象。使用 const 构造函数创建值相同的对象时,Dart 会在内存中重复使用同一个实例,从而提升性能。
要创建常量构造函数,请在构造函数名称前添加 const 关键字,并确保所有实例变量都是 final:
class Color {
final int red;
final int green;
final int blue;
const Color(this.red, this.green, this.blue);
}
const white = Color(255, 255, 255);
const alsoWhite = Color(255, 255, 255);
print(identical(white, alsoWhite)); // truewhite 和 alsoWhite 指向内存中的同一个对象,因为它们使用常量构造函数创建时的值完全相同。
你也可以在不使用 const 关键字的情况下使用 const 构造函数,这样会创建普通(非常量)实例:
var red = Color(255, 0, 0); // 普通实例
const blue = Color(0, 0, 255); // 常量实例常量构造函数常用于不可变的配置对象、颜色或尺寸等预定义值,以及任何你想在优化内存使用的同时确保对象不可变的场景。
挑战
简单我们来为一个简单的游戏构建一个配置系统,使用常量构造函数来定义不可变且可重复使用的设置。
你将创建两个文件来组织代码:
difficulty.dart:定义一个表示游戏难度设置的Difficulty类。这个类应包含:- 三个
final字段:name(String)、enemyCount(int)和playerLives(int) - 一个用于初始化这三个字段的常量构造函数
- 一个用于输出难度信息的
display()方法
- 三个
main.dart:导入难度类,并创建三个常量难度预设:easy,名称为'Easy',有5个敌人和5条生命medium,名称为'Medium',有10个敌人和3条生命hard,名称为'Hard',有20个敌人和1条生命
const关键字将这三个预设都创建为编译时常量。然后按上述顺序分别调用它们的display()。最后,使用identical()检查两个const Difficulty('Easy', 5, 5)对象是否相同,并输出结果。
display() 方法应按以下确切格式输出:
[name]: [enemyCount] enemies, [playerLives] lives预期输出:
Easy: 5 enemies, 5 lives
Medium: 10 enemies, 3 lives
Hard: 20 enemies, 1 lives
true亲手试试
import 'difficulty.dart';
void main() {
// TODO: 使用 const 关键字创建三个常量难度预设:
// easy:名称为 'Easy',5 enemies, 5 lives
// medium:名称为 'Medium',10 enemies, 3 lives
// hard:名称为 'Hard',20 个敌人,1 条命
// TODO: 按 easy、medium、hard 的顺序,对每个难度调用 display()
// TODO: 检查两个 const Difficulty('Easy', 5, 5) 对象是否相同
// 使用 identical() 并打印结果
}
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
面向对象编程中的所有课
自己练习: Dart 在线编译器