Menu
CoddyTech

在 “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 语句中使用字符串或数字安全得多,因为拼写错误可能导致意外行为。使用枚举时,你可以在编译时进行检查,确保代码处理了所有可能的情况。

challenge icon

挑战

简单

创建一个程序,使用枚举和 switch 语句管理游戏角色的状态。你的任务是:

  1. 定义一个名为 CharacterState 的枚举,包含以下值:idle、walking、running、jumping 和 attacking
  2. 创建一个名为 currentState、类型为 CharacterState 的变量,并将其赋值为 CharacterState.idle
  3. 创建一个名为 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"
  4. 使用该函数按以下精确格式输出初始状态消息:Initial state: Character is standing still
  5. 将 currentState 改为 CharacterState.walking
  6. 按以下精确格式输出更新后的状态消息:Updated state: Character is moving slowly
  7. 将 currentState 改为 CharacterState.attacking
  8. 按以下精确格式输出最终状态消息: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
  
  // 打印最终状态消息
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程控制中的所有课

自己练习: Dart 在线编译器