初始化列表
本课属于 Coddy Dart 学习旅程的“面向对象编程”单元。第 12 课,共 110 课。
初始化列表是构造函数中冒号后、函数体前的代码。它会在构造函数体执行之前运行,用于初始化实例变量。
你已经在前面的课中见过初始化列表:
Point.origin() : x = 0, y = 0;冒号后面的部分(x = 0, y = 0)是初始化列表。多个初始化项之间用逗号分隔。
使用 final 变量时,初始化列表至关重要,因为必须在构造函数体运行前设置这些变量:
class Circle {
final double radius;
final double area;
Circle(double r)
: radius = r,
area = 3.14159 * r * r;
}
Circle c = Circle(5);
print(c.radius); // 5.0
print(c.area); // 78.53975初始化列表还可以在给构造函数参数赋值之前进行计算或转换。当你需要在创建对象时推导值或验证数据,这会很有用。
你可以将简写 this. 语法与初始化列表结合使用:
class Rectangle {
final double width;
final double height;
final double area;
Rectangle(this.width, this.height)
: area = width * height;
}
Rectangle rect = Rectangle(4, 5);
print(rect.area); // 20.0这里,width 和 height 通过简写赋值,而 area 则在初始化列表中使用这些值进行计算。
挑战
简单我们来编写一个盒子尺寸计算器,使用初始化列表在创建对象时计算派生值。
你将把代码分成两个文件:
box.dart:定义一个Box类,用来表示具有尺寸和自动计算属性的 3D 盒子。这个类应包含:- 三个
final double字段:length、width和height - 两个计算得出的
final double字段:volume和surfaceArea - 一个使用
this.简写来接收length、width和height的构造函数,并使用初始化列表计算volume(length × width × height)和surfaceArea(2 × (length×width + width×height + height×length)) - 一个用于打印盒子信息的
display()方法
- 三个
main.dart:导入你的盒子类,并创建两个盒子:- 尺寸为
3.0、4.0、5.0的盒子 - 尺寸为
2.0、2.0、2.0的盒子
display()。- 尺寸为
display() 方法应严格按照以下格式打印:
Box: [length]x[width]x[height] | Volume: [volume] | Surface: [surfaceArea]预期输出:
Box: 3.0x4.0x5.0 | Volume: 60.0 | Surface: 94.0
Box: 2.0x2.0x2.0 | Volume: 8.0 | Surface: 24.0亲手试试
import 'box.dart';
void main() {
// TODO: 创建一个尺寸为 3.0、4.0、5.0 的盒子
// TODO: 创建一个尺寸为 2.0、2.0、2.0 的盒子
// TODO: 依次对每个盒子调用 display()
}
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
面向对象编程中的所有课
自己练习: Dart 在线编译器