Tôi có một tình huống mà tôi cần kiểm tra nhiều điều kiện, trong đó mỗi kết hợp có một kết quả khác nhau. Trong điều kiện cụ thể của tôi, tôi đã có 2 biến, đó là các loại enum, mà mỗi có thể là 2 giá trị khác nhau.Kiểm tra hiệu quả nhiều điều kiện
enum Enum1
{
COND_1,
COND_2
}
enum EnumA
{
COND_A,
COND_B
}
Enum1 var1;
EnumA varA;
Điều này mang lại cho tôi 4 điều kiện có thể, yêu cầu 4 kết quả khác nhau. Tôi đã đưa ra một vài cách khác nhau để làm điều này, hoặc là sử dụng nếu báo cáo hoặc báo cáo chuyển đổi:
if(var1 == Enum1.COND_1 && varA == EnumA.COND_A)
{
// Code
}
else if(var1 == Enum1.COND_1 && varA == EnumA.COND_B)
{
// Code
}
else if(var1 == Enum1.COND_2 && varA == EnumA.COND_A)
{
// Code
}
else if(var1 == Enum1.COND_2 && varA == EnumA.COND_B)
{
// Code
}
Hoặc:
switch(var1)
{
case COND_1:
switch(varA)
{
case COND_A:
// Code
break;
case COND_B:
// Code
break;
}
break;
case COND_2:
switch(varA)
{
case COND_A:
// Code
break;
case COND_B:
// Code
break;
}
break;
}
Tôi đã suy nghĩ của người khác, nhưng không muốn để điền vào mã này: P Tôi muốn biết cách tốt nhất để làm điều này là gì. Tôi nghĩ rằng chuyển đổi dễ đọc hơn một chút, nhưng các ifs ngắn hơn. Tôi nghĩ nó sẽ rất tuyệt nếu các công tắc có thể có nhiều điều kiện, nhưng tôi chưa từng nghe về nó. Điều này cũng đặt ra câu hỏi: cách tốt nhất để làm điều này với một số tùy ý các biến và giá trị có thể là gì?
Nếu bạn đang thực hiện việc này theo cách * nghiêm túc *, bạn có thể sử dụng công cụ quy tắc hoặc hệ thống bên thứ ba khác sẽ trừu tượng tất cả mã đó. – Kayaman
Tại sao bạn cần kiểm tra nhiều điều kiện như vậy? Bạn đang thực sự làm gì? Điều này có thể được giải quyết một cách đẹp hơn với thiết kế lại thay vì cố gắng quyết định giữa ifs và switch. – Kayaman
https://en.wikipedia.org/wiki/Chain-of-responsibility_pattern –