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.
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:
- Định nghĩa một enum có tên
CharacterStatevới các giá trị sau:idle,walking,running,jumpingvàattacking - Tạo một biến có tên
currentStatethuộc kiểuCharacterStatevà gán cho biến giá trịCharacterState.idle - Tạo một hàm có tên
getStateMessagenhận một tham số kiểuCharacterStatevà 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" - 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 - Đổi
currentStatethànhCharacterState.walking - In thông báo trạng thái đã cập nhật theo đúng định dạng:
Updated state: Character is moving slowly - Đổi
currentStatethànhCharacterState.attacking - 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
}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
1Thao tác nâng cao với danh sách
Thuộc tính danh sách: đầu và cuốiTrạng thái danh sách: isEmpty và isNotEmpĐảo ngược danh sáchThêm vào danh sách: insertXóa khỏi danh sách: removeWhereTìm trong danh sách: indexOfSắp xếp danh sáchXáo trộn danh sáchÔn tập: trình sắp xếp danh sách4Thao tác nâng cao với Map
Duyệt qua MapKiểm tra khóa và giá trịCác thuộc tính của Map: khóa và giá trịThêm có điều kiện: putIfAbsentXóa mục khỏi MapMap lồng nhauÔn tập: Cập nhật kho hàng2Thao tác hàm trên danh sách
Biến đổi bằng 'map'Lọc bằng 'where'Dùng '.toList()'Kiểm tra điều kiện bằng 'any'Điều kiện với 'every'Tìm phần tử bằng 'firstWhere'Ôn tập: lọc dữ liệu5Dự án: Tính tiền giỏ hàng
Thiết lập dự ánThêm mặt hàng vào giỏ8Dự án: Trình phân tích văn bản đơn giản
Tổng quan và thiết lập dự ánĐếm ký tự3Tập hợp
Tập hợp là gì?Tạo tập hợpThêm và xóa phần tử khỏi tập hợpKiểm tra phần tử trong tập hợpChuyển danh sách thành tập hợpPhép hợp của các tập hợpPhép giao của các tập hợpPhép hiệu của các tập hợpÔn tập: danh sách khách mời không trùng lặp6Xử lý lỗi cơ bản
Ngoại lệ là gì?Khối lệnh 'try-catch'Bắt ngoại lệ bằng 'on'Khối lệnh 'finally'Ném ngoại lệÔn tập: phép chia an toàn9Kiểu liệt kê (enum)
Enum là gì?Định nghĩa enum đơn giảnDùng enum với biếnEnum trong câu lệnh switchÔn tập: Đèn giao thôngTự luyện tập: Trình biên dịch Dart online