EP2: Defensive Programming: Early Exit — Đơn giản hóa logic điều kiện

🚩 Problem

Một lỗi phổ biến trong code là lồng quá nhiều điều kiện if, khiến luồng xử lý trở nên khó đọc và khó theo dõi.
Ví dụ:

if (a)
{
    if (b)
    {
        statement;
    }
}

Cách viết này dẫn đến “pyramid of doom” (kim tự tháp điều kiện) – càng nhiều điều kiện, code càng lệch sang phải, và càng khó bảo trì.


✅ Solution — Early Exit (Return Early)

Thay vì lồng các điều kiện, ta có thể thoát sớm khỏi hàm nếu không thỏa mãn điều kiện cần thiết:

if (!a)
    return;

if (!b)
    return;

statement;

Điều này giúp:

  • Giảm độ sâu của ifcode phẳng hơn, dễ đọc hơn
  • Tập trung vào trường hợp thành công (happy path)
  • Giúp người đọc nhanh chóng hiểu điều kiện để thực thi logic chính

💻 Example

Giả sử bạn đang xử lý logic đăng nhập và quyền admin:

Old Way

private void Login()
{
    bool isLoggedIn = true;  // Giả lập người dùng đã đăng nhập
    bool hasAdminPrivileges = true;  // Giả lập người dùng có quyền admin

    if (isLoggedIn)
    {
        if (hasAdminPrivileges)
        {
            // Cấp quyền truy cập trang admin
            Console.WriteLine("Access granted to the admin page.");
        }
        else
        {
            Console.WriteLine("Access denied. User does not have admin privileges.");
        }
    }
    else
    {
        Console.WriteLine("Access denied. User is not logged in.");
    }
}

Better Way — Early Exit

private void Login_Early_Exit()
{
    bool isLoggedIn = true;  // Giả lập người dùng đã đăng nhập
    bool hasAdminPrivileges = true;  // Giả lập người dùng có quyền admin

    if (!isLoggedIn)
        return;  // Thoát sớm nếu chưa đăng nhập

    if (!hasAdminPrivileges)
        return;  // Thoát sớm nếu không có quyền admin

    // Cấp quyền truy cập trang admin
    Console.WriteLine("Access granted to the admin page.");
}

Demo

void Main()
{
    Login();
    Login_Early_Exit();
}


💬 Kết luận

Kỹ thuật Early Exit là một trong những chiến lược quan trọng của Defensive Programming.
Thay vì để code “chôn” logic chính giữa nhiều tầng điều kiện, hãy để những trường hợp không hợp lệ thoát ra sớm.

💡 Nguyên tắc:

Hãy viết code như thể “người dùng” (hoặc hệ thống) luôn có thể làm sai —
và bạn cần xử lý sớm, rõ ràng, dứt khoát.


🔍 Khi nào nên dùng Early Exit

  • Khi có nhiều điều kiện kiểm tra tiền đề (preconditions).
  • Khi bạn muốn tập trung vào logic chính thay vì “rừng” điều kiện.
  • Khi viết hàm có trách nhiệm đơn giản và dễ dự đoán.