许多条件,减少代码大小

Many conditions, reducing code size

除了在if内部使用if分支来检查并满足所有要求的条件之外,还有其他好的解决方案吗?这样写看起来代码有点大,我想减少代码大小,但适合我的需要。

if(a>0 && b>0 && c>0) 
{
    if(a==d && b==e && c==f)
    {
         if(a<FIELD_HEIGHT && b<FIELD_WIDTH)
         {
             if(true) 
             {

             }
         }
    }
}

由于您的代码片段没有任何 else 语句,您可以将代码缩减为

 if (<condition1> && <condition2> && <condition3>)

等等。

您可以使用逻辑与运算符 (&&):

if (cond1 && cond2 && cond3) {
  // action
}

相当于:

if (cond1) {
  if (cond2) {
    if (cond3) {
      // action
    }
  }
}

只要您不需要特定于任何这些条件的 else 子句,这就很有用。

条件将从左侧计算,因此如果 cond1 将是 false,则不会计算 cond2cond3


编辑:如果您有许多条件需要为真才能采取行动,并且您关心代码的可读性,我会将它们分组首先是布尔变量,即:

int isCar = has4Wheels && hasBreaks && hasEngine;
int isASportsCar = hasLargeEngine && hasLowSuspension && hasManualControls;
int isFerrari = isV12 && isRed && hasANiceLogo;

if (isCar && isASportsCar && isFerrari) {
  // action
}

示例可能很愚蠢,但您明白了。

由于您没有与 if 关联的 else 子句,因此只需将所有条件放在一起,例如:

if (thisCondition && thatCondition ..) {}
  1. 如果声明了变量 abc unsigned,那将减少 if.
  2. 如果不存在特定的 else 块,则可以合并两个 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) {
    ...
}

跟进

if (   (a>0 && a<FIELD_HEIGHT && a==d)
    && (b>0 && b<FIELD_WIDTH && b==e)
    && (c>0 && c==f)
   )
{
  ...
}

并假设变量是 unsigned 整数:

if (   (a && a<FIELD_HEIGHT && a==d)
    && (b && b<FIELD_WIDTH && b==e)
    && (c && c==f)
   )
{
  ...
}

我觉得这个可以:

if(a>0 && b>0 && c>0) 
{
    if(a==d && b==e && c==f)
    {
         if(a<FIELD_HEIGHT && b<FIELD_WIDTH)
         {

         }
    }
}

在你的代码中,最后的判断:"if(true)"是多余的