除了使用if branch以检查并满足所有必需条件之外,还有其他好的解决方案吗?代码看起来有点像这样写,我想减少代码大小,但是为了满足我的需要。
if(a>0 && b>0 && c>0)
{
if(a==d && b==e && c==f)
{
if(a<FIELD_HEIGHT && b<FIELD_WIDTH)
{
if(true)
{
}
}
}
}
答案 0 :(得分:3)
您可以使用逻辑AND运算符(&&
):
if (cond1 && cond2 && cond3) {
// action
}
相当于:
if (cond1) {
if (cond2) {
if (cond3) {
// action
}
}
}
只要您不需要特定于任何条件的else
子句,这就很有用。
条件将从左侧开始,因此如果cond1
为false
,cond2
和cond3
将无法获得评估。
编辑:如果你有许多条件需要为了采取行动,并且你关心代码可读性,我首先将它们分组在一个布尔变量中,即:
int isCar = has4Wheels && hasBreaks && hasEngine;
int isASportsCar = hasLargeEngine && hasLowSuspension && hasManualControls;
int isFerrari = isV12 && isRed && hasANiceLogo;
if (isCar && isASportsCar && isFerrari) {
// action
}
示例可能很愚蠢,但你明白了。
答案 1 :(得分:1)
由于您的代码段没有任何else
步骤,您可以将代码缩减为
if (<condition1> && <condition2> && <condition3>)
等等。
答案 2 :(得分:1)
因为你没有将if,just和all条件联合起来的else子句如:
if (thisCondition && thatCondition ..) {}
答案 3 :(得分:0)
a
,b
,c
被声明为unsigned
,则会减少if
。然后,您可以将代码缩减为
unsigned a, b, c; // if declared as unsigned or if d, e, f are known to be positive
if (a == d && b == e && c == f && a < FIELD_HEIGHT && b < FIELD_WIDTH) {
...
}
答案 4 :(得分:0)
if ( (a>0 && a<FIELD_HEIGHT && a==d)
&& (b>0 && b<FIELD_WIDTH && b==e)
&& (c>0 && c==f)
)
{
...
}
并假设varibales是unsigned
整数:
if ( (a && a<FIELD_HEIGHT && a==d)
&& (b && b<FIELD_WIDTH && b==e)
&& (c && c==f)
)
{
...
}
答案 5 :(得分:0)
我认为这没关系:
if(a>0 && b>0 && c>0)
{
if(a==d && b==e && c==f)
{
if(a<FIELD_HEIGHT && b<FIELD_WIDTH)
{
}
}
}
在你的代码中,最后一个判断:“if(true)”是多余的