Câu lệnh if-else

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

graph TD; A((Bắt đầu)) --> B{Điều kiện?}; B -- Đúng --> C[Khối lệnh\nnhánh đúng]; B -- Sai --> D[Khối lệnh\nnhánh sai]; C --> E((Tiếp tục)); D --> E;

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ữ

Thông tin</div>

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 ? :?? 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