Menu
CoddyTech

Switch với `fallthrough`

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

Trong Go, câu lệnh switch thường chỉ chạy case khớp rồi tự động thoát. Tuy nhiên, từ khóa fallthrough thay đổi hành vi này bằng cách buộc chương trình tiếp tục chạy case tiếp theo, bất kể case đó có khớp hay không.

Khi bạn dùng fallthrough ở cuối một case, Go sẽ chạy code của case tiếp theo mà không kiểm tra điều kiện của case đó. Điều này khác với các ngôn ngữ như C, nơi bạn cần break để ngăn chương trình chạy tiếp sang case kế tiếp.

grade := "B"
switch grade {
case "A":
    fmt.Println("Excellent!")
    fallthrough
case "B":
    fmt.Println("Good job!")
    fallthrough
case "C":
    fmt.Println("Keep trying!")
}

Trong ví dụ này, nếu grade là "B", chương trình sẽ in ra cả "Good job!" và "Keep trying!" vì câu lệnh fallthrough. Nhờ đó, bạn có thể thực hiện nhiều hành động liên quan cho một trường hợp khớp.

challenge icon

Thử thách

Dễ

Trong thử thách này, bạn sẽ luyện cách dùng từ khóa fallthrough trong câu lệnh switch (switch statement) để tạo một hệ thống cảnh báo theo mức độ ưu tiên. Khi có cảnh báo ưu tiên cao, hệ thống sẽ hiển thị nhiều thông báo cảnh báo liên tiếp.

Bạn sẽ nhận một chuỗi đầu vào biểu thị mức độ cảnh báo. Hãy tạo câu lệnh switch để xử lý các mức độ cảnh báo khác nhau và dùng fallthrough để hiển thị các thông báo nối tiếp cho cảnh báo có mức độ ưu tiên cao hơn.

Đầu vào sẽ là một trong các mức độ cảnh báo sau: "critical", "high", "medium" hoặc "low".

Câu lệnh switch của bạn cần hoạt động như sau:

  • Với "critical": In ra "CRITICAL: System shutdown imminent!" rồi chuyển tiếp đến trường hợp high (sau đó chuyển tiếp đến medium)
  • Với "high": In ra "HIGH: Immediate attention required!" rồi chuyển tiếp để in cả thông báo ưu tiên medium
  • Với "medium": In ra "MEDIUM: Please review when possible"
  • Với "low": In ra "LOW: Informational only"

Vì fallthrough tạo thành chuỗi nối tiếp, cảnh báo "critical" sẽ in ra ba dòng (CRITICAL, HIGH, MEDIUM), cảnh báo "high" sẽ in ra hai dòng (HIGH, MEDIUM), còn "medium" và "low" mỗi mức sẽ in ra một dòng.

Tự làm thử

package main

import "fmt"

func main() {
    // Đọc đầu vào
    var alertLevel string
    fmt.Scanln(&alertLevel)
    
    // TODO: Viết code bên dưới
    // Tạo câu lệnh switch có fallthrough cho hệ thống cảnh báo
    
}
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 Go online