16

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

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

或者:

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

这两种风格的问题是,我的眼睛很难在真正的块中找到代码并将其与条件句分开,或者在长时间的条件后,眼睛很难确定正确的下一行一行,特别是如果 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();
}

有没有人有一个编码风格指南(可能是公司编码风格政策)以不同于我建议的方式或更好的方式解决这个问题?哪一个更可取,您能找到我提到的解决方案的任何缺点或优点吗?

4

8 回答 8

27

这样的事情怎么样?

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

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

于 2009-06-29T16:19:45.540 回答
15
if( isNull(value1) ||
    isToLong(value1) ||
    hasBadFormat(valule1))
{
    doSomething();
}
else
{
    doSomethingElse();
}

现在你很容易看到我认为的真正块。

当然,我更喜欢:

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

:-)

于 2009-06-29T16:18:37.520 回答
9

显而易见的解决方案是按照上帝的意图将左括号移到下一行!

</flamebait>

于 2009-06-29T16:18:19.207 回答
5

这是我更喜欢的替代方案:

if(
    isValid = isNull(value1) ||
    isToLong(value1) ||
    hasBadFormat(valule1)
) {
    doSomething();
}
else {
    doSomethingElse();
}
于 2015-07-23T18:17:30.587 回答
2

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

我会这样写:

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

除非那个条件不够长,不能迫使我滚动查看所有内容。如果没有,我会这样做:

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

在这种情况下,因为它看起来足够短,我会做后者。

于 2009-06-29T16:18:53.823 回答
1

I tend to put the operators at the start of the line so they all up.

So, here's one suggestion:

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

Here's another:

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

(For &&, it would be if(1 && a && b), etc.)

Or this:

if
(
   isNull(value1)
   || isTooLong(value1)
   || hasBadFormat(valule1)
)
/* ...etc... */
于 2009-06-29T17:30:34.283 回答
1

if无论长度如何,我个人都会像这样格式化我的所有陈述:

if (isNull(value1) || isToLong(value1) || hasBadFormat(value1)) {
    doSomething();
} else {
    doSomethingElse();
}
于 2019-06-26T08:36:35.010 回答
-3

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

if (bool)        // comment
{   dothis;        
    andthis;       
} else if (bool) // comment
{   dothis;       
    andthis;        
} else           // comment
{   dothis;        
    andthis;     
}
于 2014-12-05T04:36:43.393 回答