Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ “中设置条件检查格式的最佳方法”;如果;陈述_C++_Code Formatting - Fatal编程技术网

C++ “中设置条件检查格式的最佳方法”;如果;陈述

C++ “中设置条件检查格式的最佳方法”;如果;陈述,c++,code-formatting,C++,Code Formatting,这段代码看起来脏兮兮的,我不知道如何格式化它,以便我可以阅读它,理解它,同时看起来干净 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) && ((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 && 
        (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 (2 == center &&  
    (((y - height/2) == j && (x + width/2) == i) ||  
     ((y + height/2) == j && (x + width/2) == i))
   )
{ 
  regenerateDot(i + 1, j, dots); 
}

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

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

例如:

if (IsCentered(center) && IsInsideLower(y, j, i) && IsInsideUpper(y, j, i))
  regenerateDot(i + 1, j, dots);

请注意,在上面的示例中,函数名可能是假的(我还没有真正尝试理解代码的用途),但您应该了解情况。

这与您发布的代码相同:

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); 

+一个小建议,你不需要额外的大括号,在你为条件单独设置
bool
之后。例如,
bool inLowerRegion=(y-height/2)=j&(x+width/2)=i。此外,在原始的
if
条件下,
inEitherRegion
可以很容易地替换为
inLowerRegion | | InUpper Region
;为什么要引入额外的变量。哇,这太性感了。谢谢@艾米琳德:很好,额外的括号,我会把它们去掉。
inEitherRegion
额外变量是一个品味问题。对我来说,它使得<<代码>如果更可读。我肯定会考虑使用函数而不是局部变量。它们增加了主函数的长度,并引入了新的变量来跟踪(大脑过载)。完全移除大括号有时会在读者的头脑中造成混乱。依我看,
(y-高度/2)==j
值得保留。@iammilind:不同意。如果有人不懂这种语言,那是她的问题。这就像人们不使用功能X(例外、模板、用于(;)、RAII等)只是因为它对某些人来说“太复杂了”。+1用于可读性和简洁性。好的函数名意味着我不需要麻烦自己查找它们的描述!如果对答案投反对票的人也给出这样做的理由,那就太好了。