在语句中设置条件检查格式"if"最佳方法

Best way to format the conditional checks in "if" statement

本文关键字:if 最佳 方法 格式 检查 语句 设置 条件      更新时间:2023-10-16

这段代码看起来很脏,我不知道如何格式化它,以便我可以阅读,理解它,同时看起来很干净。

if(center==2 && ((((y-height/2)==j) && ((x+width/2)==i)) || (((y+height/2)==j) &&  ((x+width/2)==i))))
  regenerateDot(i+1, j, dots); 

有什么建议吗?

我会将布尔表达式分解为以可读性命名的变量。比如:

bool isCentered = center == 2;
bool inLowerRegion = (y-height/2) == j && (x+width/2) == i;
bool inUpperRegion = (y+height/2) == j && (x+width/2) == i;
bool inEitherRegion = inLowerRegion || inUpperRegion;
if (isCentered && inEitherRegion) {
   regenerateDot(i+1, j, dots);
}

考虑重构。您可以将子表达式放入它们自己的函数中,从而命名它们的用途。

例如:

if (IsCentered(center) && IsInsideLower(y, j, i) && IsInsideUpper(y, j, i))
  regenerateDot(i + 1, j, dots);
请注意,在上面的例子中,函数名可能是假的(我并没有真正试图理解代码的目的是什么),但您应该了解情况。

几乎所有的括号都是多余的…加上一些空格就变成了:

    if(center == 2 && 
        (y - height/2 == j && x + width/2 == i || 
         y + height/2 == j && x + width/2 == i))
        regenerateDot(i+1, j, dots);

对于一些复杂的东西,我可能会将其分解为每个条件(按共享&&分组)试图表示的内容,并将其分配给一个合理的变量名。

您最多可以删除额外的大括号,添加一些空格并将逻辑分区放在不同的行中,如

if(center == 2 && 
  (((y - height/2) == j || (y + height/2) == j) && (x + width/2) == i))
{
  regenerateDot(i+1, j, dots);
}

编辑:您有一个冗余条件(x + width/2) == i,我在这里进行了优化。

这与您发布的代码相同:

if( center == 2 )
{
    if( (x+width/2) == i )
    {
        if( (y-height/2) == j ) || (y+height/2) == j ) )
        {
            regenerateDot(i+1, j, dots); 
        }
    }
}

重新排序会得到如下内容:

if (center==2 && (i-x)==(width/2) && abs(j-y)==(height/2))
    regenerateDot(i+1, j, dots); 

我想这样做

if (2 == center &&  
    (((y - height/2) == j && (x + width/2) == i) ||  
     ((y + height/2) == j && (x + width/2) == i))
   )
{ 
  regenerateDot(i + 1, j, dots); 
}