EP4:Defensive Programming: Tối giản biểu thức điều kiện với toán tử ba ngôi và gán trực tiếp

🚩 Problem

Một trong những lỗi “kinh điển” khiến code trở nên dài dòng là việc lạm dụng if-else chỉ để gán giá trị đơn giản.
Ví dụ:

if (a)
{
    b = someValue;
}
else
{
    b = anotherValue;
}

Hoặc tệ hơn:

if (a)
{
    b = true;
}
else
{
    b = false;
}

Hai trường hợp trên đều đúng chức năng, nhưng dư thừa về mặt logicchiếm chỗ trong code.


✅ Solution — Sử dụng toán tử điều kiện ?: hoặc gán trực tiếp

1️⃣ Sử dụng toán tử ba ngôi (Conditional Operator)

Cú pháp:

b = (a) ? someValue : anotherValue;

Giúp:

  • Giảm số dòng code.
  • Giữ logic rõ ràng và dễ đọc.
  • Giúp code “functional” hơn – chỉ tập trung vào kết quả.

📚 Tham khảo:
Microsoft Docs – Conditional Operator (?:)


2️⃣ Gán trực tiếp giá trị boolean

Nếu chỉ gán true/false dựa trên điều kiện, bạn không cần if-else:

b = a;

Đơn giản, dễ hiểu, và ít lỗi hơn.


💻 Example 1 – Conditional Operator

Giả sử bạn cần tính mức giảm giá cho khách hàng:

Old Way

private void ManipulateCustomerDiscount()
{
    bool isLoyalCustomer = true;

    double discountPercentage;
    if (isLoyalCustomer)
    {
        discountPercentage = 20.0;
    }
    else
    {
        discountPercentage = 5.0;
    }

    Console.WriteLine("Discount using if-else: " + discountPercentage + "%");
}

Better Way – Using ?:

private void ManipulateCustomerDiscount_Better()
{
    bool isLoyalCustomer = true;

    double discountPercentage = (isLoyalCustomer) ? 20.0 : 5.0;

    Console.WriteLine("Discount using conditional operator: " + discountPercentage + "%");
}

Demo

void Main()
{	
	ManipulateCustomerDiscount();
	ManipulateCustomerDiscount_Better();
}


💻 Example 2 – Direct Boolean Assignment

Tiếp theo, xem ví dụ kiểm tra tính đủ điều kiện miễn phí vận chuyển:

Old Way

private void CheckCustomerEligibleForFreeShipping()
{
    bool isPremiumMember = CheckPremiumMember();

    bool eligibleForFreeShipping;
    if (isPremiumMember)
    {
        eligibleForFreeShipping = true;
    }
    else
    {
        eligibleForFreeShipping = false;
    }

    Console.WriteLine("Eligible for free shipping (if-else): " + eligibleForFreeShipping);
}

Better Way – Direct Assignment

private void CheckCustomerEligibleForFreeShipping_Better()
{
    bool isPremiumMember = CheckPremiumMember();

    bool eligibleForFreeShipping = isPremiumMember;

    Console.WriteLine("Eligible for free shipping (direct assignment): " + eligibleForFreeShipping);
}

private bool CheckPremiumMember()
{
    return true;
}

Demo

void Main()
{
	CheckCustomerEligibleForFreeShipping();
	CheckCustomerEligibleForFreeShipping_Better();
}


💬 Kết luận

Trong Defensive Programming, việc giữ cho code ngắn gọn, dễ hiểu và chính xác là yếu tố quan trọng.
Dùng toán tử ba ngôi hoặc gán trực tiếp boolean giúp bạn:

  • Viết code ít lỗi hơn.
  • Dễ đọc, dễ kiểm thử, dễ bảo trì.
  • Tập trung vào logic kinh doanh thay vì cấu trúc rườm rà.

🧩 “Đôi khi cách phòng thủ tốt nhất là không viết quá nhiều.”


🔍 Khi nào nên áp dụng

  • Khi điều kiện chỉ trả về hai giá trị khác nhau.
  • Khi bạn có logic phân nhánh đơn giản.
  • Khi muốn giữ code ngắn gọn, không lồng nhiều if-else.