Mục đích
if-else được dùng khi chương trình phải chọn đúng một trong hai hướng xử lý. Đây là cấu trúc cơ bản để biểu diễn các quy tắc dạng đúng hoặc sai.
Sơ đồ luồng
Ví dụ phân loại kết quả
score = 7
if score >= 5:
print("Dat")
else:
print("Chua dat")
program IfElseDemo;
var
score: Integer;
begin
score := 7;
if score >= 5 then
Writeln('Dat')
else
Writeln('Chua dat');
end.
#include <stdio.h>
int main(void) {
int score = 7;
if (score >= 5) {
printf("Dat\n");
} else {
printf("Chua dat\n");
}
return 0;
}
#include <iostream>
using namespace std;
int main() {
int score = 7;
if (score >= 5) {
cout << "Dat" << endl;
} else {
cout << "Chua dat" << endl;
}
return 0;
}
int score = 7;
if (score >= 5)
{
Console.WriteLine("Dat");
}
else
{
Console.WriteLine("Chua dat");
}
const score = 7;
if (score >= 5) {
console.log("Dat");
} else {
console.log("Chua dat");
}
const score: number = 7;
if (score >= 5) {
console.log("Dat");
} else {
console.log("Chua dat");
}
package main
import "fmt"
func main() {
score := 7
if score >= 5 {
fmt.Println("Dat")
} else {
fmt.Println("Chua dat")
}
}
fn main() {
let score = 7;
if score >= 5 {
println!("Dat");
} else {
println!("Chua dat");
}
}
Khi nào dùng
- Khi chỉ tồn tại hai trạng thái cần xử lý.
- Khi muốn đảm bảo luôn có phản hồi, kể cả lúc điều kiện sai.
- Khi cần tách rõ trường hợp đạt và không đạt, hợp lệ và không hợp lệ, bật và tắt.
Lưu ý thực hành
Không nên lồng quá nhiều if-else liên tiếp nếu có thể thay bằng bảng điều kiện rõ ràng hơn hoặc một cấu trúc nhiều nhánh. Điều này giúp mã dễ đọc và dễ kiểm thử hơn.
Biểu thức điều kiện ngắn gọn (ternary)
Một số ngôn ngữ cung cấp cú pháp viết tắt cho if-else khi mỗi nhánh chỉ cần tạo ra một giá trị. Thường dùng khi gán biến hoặc trả giá trị.
score = 7
result = "Dat" if score >= 5 else "Chua dat"
print(result) # Dat
Pascal không có toán tử ternary. Dùng if-else đầy đủ:
program TernaryDemo;
var
score: Integer;
result: String;
begin
score := 7;
if score >= 5 then
result := 'Dat'
else
result := 'Chua dat';
Writeln(result);
end.
#include <stdio.h>
int main(void) {
int score = 7;
const char *result = (score >= 5) ? "Dat" : "Chua dat";
printf("%s\n", result); /* Dat */
return 0;
}
#include <iostream>
#include <string>
using namespace std;
int main() {
int score = 7;
string result = (score >= 5) ? "Dat" : "Chua dat";
cout << result << endl; // Dat
return 0;
}
int score = 7;
string result = score >= 5 ? "Dat" : "Chua dat";
Console.WriteLine(result); // Dat
const score = 7;
const result = score >= 5 ? "Dat" : "Chua dat";
console.log(result); // Dat
const score: number = 7;
const result: string = score >= 5 ? "Dat" : "Chua dat";
console.log(result); // Dat
Go không có toán tử ternary. Dùng if-else đầy đủ:
package main
import "fmt"
func main() {
score := 7
result := "Chua dat"
if score >= 5 {
result = "Dat"
}
fmt.Println(result) // Dat
}
fn main() {
let score = 7;
let result = if score >= 5 { "Dat" } else { "Chua dat" };
println!("{}", result); // Dat
}
Ghi chú theo ngôn ngữ
Python dùng cú pháp gia_tri_1 if dieu_kien else gia_tri_2 cho biểu thức điều kiện ngắn gọn. Khác với nhiều ngôn ngữ, điều kiện đứng ở giữa chứ không đứng đầu.
Pascal không có toán tử ternary. Cần viết if-else đầy đủ, kể cả khi mỗi nhánh chỉ gán một giá trị.
C có toán tử ternary ? :. Cú pháp: (dieu_kien) ? gia_tri_neu_dung : gia_tri_neu_sai. Dùng ngắn gọn khi cần gán giá trị trong một dòng.
C++ kế thừa toán tử ? : từ C. Trong C++ hiện đại các kiểu của hai nhánh phải tương thích để trình biên dịch có thể suy luận kiểu kết quả.
C# có toán tử ternary ? : giống C. Từ C# 8 còn có toán tử ?? (null-coalescing) và ??= cho các bài toán liên quan đến giá trị null.
JavaScript có toán tử ternary ? : và toán tử || (hoặc ?? từ ES2020) thường dùng để đặt giá trị mặc định: const x = value ?? "default".
TypeScript giữ nguyên toán tử ternary ? : và ?? của JavaScript, nhưng thêm kiểm tra kiểu nghiêm hơn — hai nhánh phải cùng kiểu để an toàn.
Go không có toán tử ternary theo thiết kế — muốn mã dễ đọc hơn. Mọi logic rẽ nhánh phải dùng if-else tường minh.
Rust không có toán tử ternary ? :, nhưng vì if-else là biểu thức, có thể viết let x = if condition { a } else { b } với cú pháp tương đương và rõ ràng hơn.
Bình luận