🚩 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
if→ code 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.