Mục đích
Chuỗi điều kiện được dùng khi bài toán có nhiều hơn hai khả năng xử lý. Các điều kiện được kiểm tra theo thứ tự từ trên xuống dưới, và chương trình chọn nhánh đầu tiên thỏa mãn.
Sơ đồ luồng
Ví dụ xếp loại học tập
score = 8.2
if score >= 9:
print("Xuat sac")
elif score >= 8:
print("Gioi")
elif score >= 6.5:
print("Kha")
else:
print("Can co gang them")
program GradeDemo;
var
score: Real;
begin
score := 8.2;
if score >= 9 then
Writeln('Xuat sac')
else if score >= 8 then
Writeln('Gioi')
else if score >= 6.5 then
Writeln('Kha')
else
Writeln('Can co gang them');
end.
#include <stdio.h>
int main(void) {
double score = 8.2;
if (score >= 9) {
printf("Xuat sac\n");
} else if (score >= 8) {
printf("Gioi\n");
} else if (score >= 6.5) {
printf("Kha\n");
} else {
printf("Can co gang them\n");
}
return 0;
}
#include <iostream>
using namespace std;
int main() {
double score = 8.2;
if (score >= 9) {
cout << "Xuat sac" << endl;
} else if (score >= 8) {
cout << "Gioi" << endl;
} else if (score >= 6.5) {
cout << "Kha" << endl;
} else {
cout << "Can co gang them" << endl;
}
return 0;
}
double score = 8.2;
if (score >= 9)
{
Console.WriteLine("Xuat sac");
}
else if (score >= 8)
{
Console.WriteLine("Gioi");
}
else if (score >= 6.5)
{
Console.WriteLine("Kha");
}
else
{
Console.WriteLine("Can co gang them");
}
const score = 8.2;
if (score >= 9) {
console.log("Xuat sac");
} else if (score >= 8) {
console.log("Gioi");
} else if (score >= 6.5) {
console.log("Kha");
} else {
console.log("Can co gang them");
}
const score: number = 8.2;
if (score >= 9) {
console.log("Xuat sac");
} else if (score >= 8) {
console.log("Gioi");
} else if (score >= 6.5) {
console.log("Kha");
} else {
console.log("Can co gang them");
}
package main
import "fmt"
func main() {
score := 8.2
if score >= 9 {
fmt.Println("Xuat sac")
} else if score >= 8 {
fmt.Println("Gioi")
} else if score >= 6.5 {
fmt.Println("Kha")
} else {
fmt.Println("Can co gang them")
}
}
fn main() {
let score = 8.2_f64;
if score >= 9.0 {
println!("Xuat sac");
} else if score >= 8.0 {
println!("Gioi");
} else if score >= 6.5 {
println!("Kha");
} else {
println!("Can co gang them");
}
}
Khi nào nên dùng
- Khi số lượng trường hợp nhỏ và thứ tự kiểm tra có ý nghĩa.
- Khi mỗi nhánh phụ thuộc vào một điều kiện khác nhau.
- Khi muốn giữ toàn bộ quy tắc trong cùng một cấu trúc tuyến tính, dễ đọc từ trên xuống.
Ghi chú theo ngôn ngữ
Python dùng từ khóa elif để nối thêm nhánh. Từ phiên bản 3.10, một số bài toán so khớp giá trị còn có thể dùng match-case để diễn đạt rõ hơn.
Pascal có thể viết chuỗi else if như ví dụ trên. Khi cần so khớp một giá trị rời rạc với nhiều trường hợp, case ... of thường gọn và dễ đọc hơn.
C hỗ trợ cả else if lẫn switch. switch phù hợp với so sánh theo các giá trị nguyên hoặc ký tự cố định, còn else if linh hoạt hơn với điều kiện phạm vi.
C++ có else if và switch giống C. Với C++17, cú pháp if constexpr cho phép rẽ nhánh tại compile time. C++23 bổ sung switch với pattern matching.
C# hỗ trợ else if và cũng có switch biểu thức (expression switch) từ C# 8, cho phép viết gọn các phép so khớp giá trị.
JavaScript dùng else if và switch. switch so khớp dùng === (so sánh nghiêm ngặt). Không quên break ở cuối mỗi case để tránh “fall-through” (chạy tiếp sang case tiếp theo).
TypeScript kế thừa else if và switch từ JavaScript. Khi dùng union type, TypeScript có thể kiểm tra tính đầy đủ của các nhánh và cảnh báo nếu có trường hợp chưa được xử lý.
Go dùng else if và switch. Điểm đặc biệt: switch trong Go không cần break — mỗi case tự động dừng. Cần từ khóa fallthrough nếu muốn chạy tiếp case tiếp theo.
Rust có match — tương đương nâng cao của switch/case — rất mạnh cho so khớp nhiều mẫu. if-else if vẫn dùng được cho điều kiện phạm vi số thực.
Kết luận
Chuỗi điều kiện giúp biểu diễn các quy tắc phân loại nhiều mức. Khi một nhánh lại cần thêm quyết định bên trong nó, chuyển sang Rẽ nhánh lồng nhau.
Bình luận