如何缩进'if'语句的长条件?

时间:2009-06-29 16:14:26

标签: coding-style if-statement conditional

我的问题与this previous question有关,但所提供的解决方案并未解决我在下面概述的问题。谷歌搜索后,我没有找到任何代码样式指南,解决if语句中的长条件的具体问题。

if( isNull(value1) ||
    isToLong(value1) ||
    hasBadFormat(valule1)){
    doSomething();
}else{
    doSomethingElse();
}

OR:

if( isNull(value1) || isToLong(value1) || hasBadFormat(valule1) ){
    doSomething();
}else{
    doSomethingElse();
}

我对这两种风格的问题是,我的眼睛很难找到真正的块中的代码并将其与条件分开,或者眼睛很难确定正确的下一行。 long条件单行,特别是如果if语句已经缩进函数或其他if语句中的几个选项卡。

最好是做这样的事情:

if(     isNull(value1) ||
        isToLong(value1) ||
        hasBadFormat(valule1)){
    doSomething();
}else{
    doSomethingElse();
}

或者这种风格会更好地以下列方式之一缩进每个新条件:

if( isNull(value1) ||
        isToLong(value1) ||
            hasBadFormat(valule1)){
    doSomething();
}else{
    doSomethingElse();
}

if( isNull(value1) 
        || isToLong(value1) 
            || hasBadFormat(valule1) ){
    doSomething();
}else{
    doSomethingElse();
}

是否有人采用编码风格指南(可能是公司编码风格政策)以与我提议的方式不同或更好的方式解决此问题?哪一个更好,你能找到我提到的解决方案的任何缺点或优点吗?

8 个答案:

答案 0 :(得分:24)

这样的事情怎么样?

bool isValid = isNull(value1) || isToLong(value1) || hasBadFormat(valule1);
if( isValid )
{
   doSomething();
}
else
{
   doSomethingElse();
}

条件被移动到另一行,这可能使它更容易阅读。

答案 1 :(得分:13)

if( isNull(value1) ||
    isToLong(value1) ||
    hasBadFormat(valule1))
{
    doSomething();
}
else
{
    doSomethingElse();
}

现在你可以轻松地看到真正的阻挡。

当然,我更喜欢:

if( isNull(value1)
    || isToLong(value1)
    || hasBadFormat(valule1))
{
    doSomething();
}
else
{
    doSomethingElse();
}

: - )

答案 2 :(得分:8)

显而易见的解决方案是将开放式支架移动到下一条线上,正如上帝所预期的那样!

</flamebait>

答案 3 :(得分:6)

这是我更喜欢的选择:

if(
    isValid = isNull(value1) ||
    isToLong(value1) ||
    hasBadFormat(valule1)
) {
    doSomething();
}
else {
    doSomethingElse();
}

答案 4 :(得分:2)

这实际上取决于你工作的人的偏好和惯例,但前两个是我见过的两种最常见的形式。我倾向于将条件移动到多行,只要它长到需要在我的ide中左右滚动。

这就是我写它的方式:

if(isNull(value1) ||    
   isToLong(value1) ||
   hasBadFormat(valule1))
{    
    doSomething();
}
else
{    
    doSomethingElse();
}

除非条件不足以迫使我滚动查看全部内容。如果没有,我会这样做:

if(isNull(value1) || isToLong(value1) || hasBadFormat(valule1))
{    
    doSomething();
}
else
{    
    doSomethingElse();
}

在这种情况下,由于它似乎足够短,我会做后者。

答案 5 :(得分:1)

我倾向于将操作员放在行的开头,这样他们就可以了。

所以,这是一个建议:

if(isNull(value1)
   || isTooLong(value1)
   || hasBadFormat(valule1))
{
   doSomething();
} /* if */
else
{
   doSomethingElse();
} /* else */

这是另一个:

if(0
   || isNull(value1)
   || isTooLong(value1)
   || hasBadFormat(valule1))
/* ...etc... */

(对于&amp;&amp;,if if(1&amp; a&amp;&amp; b)等)

或者这个:

if
(
   isNull(value1)
   || isTooLong(value1)
   || hasBadFormat(valule1)
)
/* ...etc... */

答案 6 :(得分:0)

我亲自设置所有if语句的格式,无论长度如何:

if (isNull(value1) || isToLong(value1) || hasBadFormat(value1)) {
    doSomething();
} else {
    doSomethingElse();
}

答案 7 :(得分:-3)

我可能是唯一一个这样做的人。它被称为Horstmann风格,但我做的略有不同。

if (bool)        // comment
{   dothis;        
    andthis;       
} else if (bool) // comment
{   dothis;       
    andthis;        
} else           // comment
{   dothis;        
    andthis;     
}