Menu
CoddyTech

Enum trong câu lệnh switch

Thuộc phần Logic và luồng điều khiển trong hành trình Dart của Coddy. Bài học 61 trên 65.

Một trong những ứng dụng mạnh mẽ nhất của kiểu liệt kê (enum) là dùng chúng với câu lệnh switch. Khi kết hợp kiểu liệt kê với câu lệnh switch, bạn sẽ tạo ra đoạn code an toàn và dễ bảo trì hơn.

Đây là cách bạn có thể dùng enum trong câu lệnh 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;
}

Ưu điểm của việc dùng kiểu liệt kê (enum) với câu lệnh switch là Dart có thể kiểm tra xem bạn đã xử lý mọi giá trị enum có thể có chưa. Nếu quên thêm case cho một trong các giá trị enum, Dart sẽ cảnh báo bạn, giúp ngăn lỗi trong code.

Cách làm này an toàn hơn nhiều so với dùng chuỗi hoặc số trong câu lệnh switch, vì lỗi chính tả có thể gây ra hành vi ngoài dự kiến. Enum giúp kiểm tra khi biên dịch, đảm bảo code của bạn xử lý mọi tình huống có thể xảy ra.

challenge icon

Thử thách

Dễ

Tạo một chương trình quản lý trạng thái của nhân vật trong trò chơi bằng enum và câu lệnh switch. Nhiệm vụ của bạn:

  1. Định nghĩa một enum có tên CharacterState với các giá trị sau: idle, walking, running, jumping và attacking
  2. Tạo một biến có tên currentState thuộc kiểu CharacterState và gán cho biến giá trị CharacterState.idle
  3. Tạo một hàm có tên getStateMessage nhận một tham số kiểu CharacterState và trả về một thông báo dạng chuỗi dựa trên trạng thái, sử dụng câu lệnh switch:
    • Với CharacterState.idle: trả về "Character is standing still"
    • Với CharacterState.walking: trả về "Character is moving slowly"
    • Với CharacterState.running: trả về "Character is moving quickly"
    • Với CharacterState.jumping: trả về "Character is in the air"
    • Với CharacterState.attacking: trả về "Character is fighting"
  4. In thông báo trạng thái ban đầu bằng hàm, theo đúng định dạng: Initial state: Character is standing still
  5. Đổi currentState thành CharacterState.walking
  6. In thông báo trạng thái đã cập nhật theo đúng định dạng: Updated state: Character is moving slowly
  7. Đổi currentState thành CharacterState.attacking
  8. In thông báo trạng thái cuối cùng theo đúng định dạng: Final state: Character is fighting

Chương trình của bạn cần minh họa cách dùng enum với câu lệnh switch, cho thấy sự kết hợp này giúp quản lý trạng thái an toàn về kiểu dữ liệu như thế nào. Câu lệnh switch phải xử lý tất cả giá trị enum và trả về thông báo phù hợp cho từng trạng thái của nhân vật. Hãy tuân theo quy ước đặt tên của Dart và dùng chính xác các thông báo chuỗi đã nêu ở trên.

Tự làm thử

import 'dart:io';

// TODO: Định nghĩa enum CharacterState tại đây

// TODO: Tạo hàm (function) getStateMessage tại đây

void main() {
  // TODO: Viết code bên dưới
  
  // Tạo biến currentState và gán giá trị CharacterState.idle cho biến đó
  
  // In ra thông báo trạng thái ban đầu
  
  // Đổi giá trị của currentState thành CharacterState.walking
  
  // In ra thông báo trạng thái đã cập nhật
  
  // Đổi giá trị của currentState thành CharacterState.attacking
  
  // In ra thông báo trạng thái cuối cùng
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng điều khiển

Tự luyện tập: Trình biên dịch Dart online