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

Jay*_*son 16 conditional if-statement coding-style

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

if( isNull(value1) ||
    isToLong(value1) ||
    hasBadFormat(valule1)){
    doSomething();
}else{
    doSomethingElse();
}
Run Code Online (Sandbox Code Playgroud)

要么:

if( isNull(value1) || isToLong(value1) || hasBadFormat(valule1) ){
    doSomething();
}else{
    doSomethingElse();
}
Run Code Online (Sandbox Code Playgroud)

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

做这样的事情会更好吗?

if(     isNull(value1) ||
        isToLong(value1) ||
        hasBadFormat(valule1)){
    doSomething();
}else{
    doSomethingElse();
}
Run Code Online (Sandbox Code Playgroud)

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

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

if( isNull(value1) 
        || isToLong(value1) 
            || hasBadFormat(valule1) ){
    doSomething();
}else{
    doSomethingElse();
}
Run Code Online (Sandbox Code Playgroud)

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

Soo*_*Tan 24

这样的事怎么样?

bool isValid = isNull(value1) || isToLong(value1) || hasBadFormat(valule1);
if( isValid )
{
   doSomething();
}
else
{
   doSomethingElse();
}
Run Code Online (Sandbox Code Playgroud)

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


Per*_*ahl 13

if( isNull(value1) ||
    isToLong(value1) ||
    hasBadFormat(valule1))
{
    doSomething();
}
else
{
    doSomethingElse();
}
Run Code Online (Sandbox Code Playgroud)

现在你可以轻松地看到真正的块.

当然,我更喜欢:

if( isNull(value1)
    || isToLong(value1)
    || hasBadFormat(valule1))
{
    doSomething();
}
else
{
    doSomethingElse();
}
Run Code Online (Sandbox Code Playgroud)

:-)


Gre*_*reg 8

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

</flamebait>


gzt*_*mas 6

这是我更喜欢的选择:

if(
    isValid = isNull(value1) ||
    isToLong(value1) ||
    hasBadFormat(valule1)
) {
    doSomething();
}
else {
    doSomethingElse();
}
Run Code Online (Sandbox Code Playgroud)