关于编码风格:如何缩进’if’语句的长条件?

How to indent long conditionals for 'if' statements?

我的问题与前一个问题有关,但提供的解决方案没有解决我在下面概述的问题。在谷歌搜索之后,我没有找到任何代码风格的指导方针来解决类似这样的if语句中长条件的特定问题。

1
2
3
4
5
6
7
if( isNull(value1) ||
    isToLong(value1) ||
    hasBadFormat(valule1)){
    doSomething();
}else{
    doSomethingElse();
}

或:

1
2
3
4
5
if( isNull(value1) || isToLong(value1) || hasBadFormat(valule1) ){
    doSomething();
}else{
    doSomethingElse();
}

这两种样式的问题是,我的眼睛很难在真正的块中找到代码并将其与条件分开,或者眼睛很难在一行上的长条件后确定正确的下一行,特别是如果if语句在函数或其他类型的语句中已经缩进了几个制表符,那么F语句。

是否最好这样做:

1
2
3
4
5
6
7
if(     isNull(value1) ||
        isToLong(value1) ||
        hasBadFormat(valule1)){
    doSomething();
}else{
    doSomethingElse();
}

或者,这种样式更适合用以下任何一种方式缩进每个新条件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if( isNull(value1) ||
        isToLong(value1) ||
            hasBadFormat(valule1)){
    doSomething();
}else{
    doSomethingElse();
}

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

是否有人有一个编码风格的指导方针(也许是公司的编码风格政策),以不同于或更好的方式来解决这个问题?哪一个更好,你能找到我提到的解决方案的任何利弊吗?


像这样的怎么样?

1
2
3
4
5
6
7
8
9
bool isValid = isNull(value1) || isToLong(value1) || hasBadFormat(valule1);
if( isValid )
{
   doSomething();
}
else
{
   doSomethingElse();
}

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


1
2
3
4
5
6
7
8
9
10
if( isNull(value1) ||
    isToLong(value1) ||
    hasBadFormat(valule1))
{
    doSomething();
}
else
{
    doSomethingElse();
}

现在你很容易就能看到真正的街区了。

当然,我更喜欢:

1
2
3
4
5
6
7
8
9
10
if( isNull(value1)
    || isToLong(value1)
    || hasBadFormat(valule1))
{
    doSomething();
}
else
{
    doSomethingElse();
}

-)


显而易见的解决方案是,按照上帝的意愿,将开放式支架移动到下一行!


这是我更喜欢的选择:

1
2
3
4
5
6
7
8
9
10
if(
    isValid = isNull(value1) ||
    isToLong(value1) ||
    hasBadFormat(valule1)
) {
    doSomething();
}
else {
    doSomethingElse();
}

这真的取决于与你一起工作的人的偏好和习惯,但前两种是我见过的最常见的两种形式。我倾向于将条件行移动到多行,除非它太长,需要在我的IDE中进行左右滚动。

我就是这样写的:

1
2
3
4
5
6
7
8
9
10
if(isNull(value1) ||    
   isToLong(value1) ||
   hasBadFormat(valule1))
{    
    doSomething();
}
else
{    
    doSomethingElse();
}

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

1
2
3
4
5
6
7
8
if(isNull(value1) || isToLong(value1) || hasBadFormat(valule1))
{    
    doSomething();
}
else
{    
    doSomethingElse();
}

在这种情况下,由于它看起来足够短,我会选择后者。


我倾向于把接线员放在队伍的开始,所以他们都站起来了。

所以,这里有一个建议:

1
2
3
4
5
6
7
8
9
10
if(isNull(value1)
   || isTooLong(value1)
   || hasBadFormat(valule1))
{
   doSomething();
} /* if */
else
{
   doSomethingElse();
} /* else */

这里还有一个:

1
2
3
4
5
if(0
   || isNull(value1)
   || isTooLong(value1)
   || hasBadFormat(valule1))
/* ...etc... */

(对于&;A&B,如果(1&A&B)等)

或者:

1
2
3
4
5
6
7
if
(
   isNull(value1)
   || isTooLong(value1)
   || hasBadFormat(valule1)
)
/* ...etc... */


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

1
2
3
4
5
6
7
8
9
10
if (bool)        // comment
{   dothis;        
    andthis;      
} else if (bool) // comment
{   dothis;      
    andthis;        
} else           // comment
{   dothis;        
    andthis;    
}