EP1: Defensive Programming: Viết điều kiện gọn gàng và an toàn hơn

🚩 Problem

Trong lập trình, đôi khi ta viết những cấu trúc điều kiện lồng nhau như sau:

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

Cách viết này hoạt động được — nhưng kém rõ ràng, khó đọc, và dễ sinh lỗi khi điều kiện phức tạp hơn.
Trong các dự án lớn, việc lồng nhiều if như vậy khiến code trở nên rối rắm, đặc biệt khi cần kiểm tra nhiều điều kiện hoặc thêm logic mới.


✅ Solution — Combine Conditions

Một cách viết đơn giản và rõ ràng hơnkết hợp các điều kiện:

if (a && b)
{
    statement;
}

Cách này giúp:

  • Code ngắn gọn và dễ đọc hơn.
  • Dễ bảo trì và mở rộng.
  • Giảm rủi ro sai logic khi quên xử lý các trường hợp lồng nhau.

💻 Example

Giả sử bạn có đoạn code kiểm tra đăng nhập và quyền quản trị:

Old Way

public 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 is not logged in.");
    }
}

Better Way — Combine Conditions

public void Login_Better_Combine()
{
    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 && hasAdminPrivileges)
    {
        // Cấp quyền truy cập trang admin
        Console.WriteLine("Access granted to the admin page.");
    }
    else
    {
        Console.WriteLine("Access denied. Either the user is not logged in or does not have admin privileges.");
    }
}

Demo

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


💬 Kết luận

Khi bạn kết hợp các điều kiện hợp lý, bạn không chỉ giúp code ngắn gọn và rõ ràng hơn, mà còn khiến nó ít dễ sai hơn — đó chính là tinh thần của Defensive Programming.

🧩 Hãy luôn đặt mình vào vị trí người bảo vệ hệ thống: viết code sao cho người khác (và chính bạn trong tương lai) khó có thể phá hỏng nó.