在 “switch” 语句中使用枚举
本课属于 Coddy Dart 学习旅程的“逻辑与流程控制”单元。第 61 课,共 65 课。
枚举最强大的用途之一是与 switch 语句配合使用。将枚举与 switch 语句结合起来,可以让代码更安全,也更易于维护。
下面介绍如何在 switch 语句中使用枚举:
enum Status {
pending,
running,
completed
}
Status currentStatus = Status.pending;
switch (currentStatus) {
case Status.pending:
print('Task is waiting to start');
break;
case Status.running:
print('Task is currently in progress');
break;
case Status.completed:
print('Task has been finished');
break;
}将枚举与 switch 语句结合使用的好处是,Dart 可以检查你是否处理了所有可能的枚举值。如果你忘了为某个枚举值添加 case,Dart 会提醒你,帮助你避免代码中的 bug。
这种做法比在 switch 语句中使用字符串或数字安全得多,因为拼写错误可能导致意外行为。使用枚举时,你可以在编译时进行检查,确保代码处理了所有可能的情况。
挑战
简单创建一个程序,使用枚举和 switch 语句管理游戏角色的状态。你的任务是:
- 定义一个名为
CharacterState的枚举,包含以下值:idle、walking、running、jumping和attacking - 创建一个名为
currentState、类型为CharacterState的变量,并将其赋值为CharacterState.idle - 创建一个名为
getStateMessage的函数,该函数接收一个CharacterState参数,并使用 switch 语句根据状态返回字符串消息: - 对于
CharacterState.idle:返回"Character is standing still" - 对于
CharacterState.walking:返回"Character is moving slowly" - 对于
CharacterState.running:返回"Character is moving quickly" - 对于
CharacterState.jumping:返回"Character is in the air" - 对于
CharacterState.attacking:返回"Character is fighting" - 使用该函数按以下精确格式输出初始状态消息:
Initial state: Character is standing still - 将
currentState改为CharacterState.walking - 按以下精确格式输出更新后的状态消息:
Updated state: Character is moving slowly - 将
currentState改为CharacterState.attacking - 按以下精确格式输出最终状态消息:
Final state: Character is fighting
你的程序应展示如何正确地将枚举与 switch 语句结合使用,说明这种组合如何实现类型安全的状态管理。switch 语句必须处理所有枚举值,并为每种角色状态返回相应的消息。请遵循 Dart 命名规范,并使用上面指定的精确字符串消息。
亲手试试
import 'dart:io';
// TODO: 在这里定义你的 CharacterState 枚举
// TODO: 在这里创建你的 getStateMessage 函数
void main() {
// TODO: 在下方编写代码
// 创建 currentState 变量,并将其值设为 CharacterState.idle
// 打印初始状态消息
// 将 currentState 改为 CharacterState.walking
// 打印更新后的状态消息
// 将 currentState 改为 CharacterState.attacking
// 打印最终状态消息
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程控制中的所有课
自己练习: Dart 在线编译器