是否有更好(或更简洁)的方式来编写以下代码?
if(conditionX)
{
if(condition1)
{
// code X1
}
else if(condition2)
{
// code X2
}
}
else if(conditionY)
{
if(condition1)
{
// code Y1
}
else if(condition2)
{
// code Y2
}
}
我还有几个条件,但我想你明白了。
最佳答案
有四种方法可以解决这个问题,但没有一种是通用的:
- 保持原样 - 这里没有太多的代码重复。如果计算
condition1
和condition2
很棘手,请预先计算它们并将它们存储在bool
变量中 - 使
conditionX
和conditionY
产生一个结果,让您统一condition1
和condition2
- 这并不总是可能的,但在某些情况下,您可以准备一个变量来统一两个分支中的事件,例如,通过使用函数指针或 lambda。 - 将处理逻辑放入具有虚函数的子类中以消除条件逻辑 - 只有当您的初始设计错过了子类化的机会时,这才有可能。本质上,这种方法将关于
conditionX
/conditionY
的决定推到创建子类的地方,然后通过调用适当的覆盖来“重用”该决定界面中的虚函数。 - 创建一个代表所有三个条件的数字组合,并转换为
switch
- 这个技巧统一了条件,减少了嵌套。
这是最后一种方法的示例:
int caseNumber = ((conditionX?1:0) << 3)
| ((conditionY?1:0) << 2)
| ((condition2?1:0) << 1)
| ((condition1?1:0) << 0);
switch (caseNumber) {
case 0x09:
case 0x0D:
case 0x0F: // code X1
break;
case 0x0A:
case 0x0E: // code X2
break;
case 0x05:
case 0x07: // code Y1
break;
case 0x06: // code Y2
break;
}
关于c++ - 嵌套冗余 'if' 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22479162/