Как сделать отступ для длинных условий для операторов if? - PullRequest
16 голосов
/ 29 июня 2009

Мой вопрос относится к этому предыдущему вопросу , но предлагаемые решения не решают проблему, которую я изложил ниже.После поиска в Google я не нашел ни одного руководства по стилю кода, которое бы решало конкретную проблему длинных условий в выражении if, подобном этому.

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

OR:

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

Есть ли у кого-нибудь руководство по стилю кодирования (может быть, политика стиля кодирования компании), которое решает эту проблему иначе или лучше, чем я предлагал?Какой из них предпочтительнее, и можете ли вы найти какие-либо минусы или плюсы в решениях, которые я упомянул?

Ответы [ 8 ]

24 голосов
/ 29 июня 2009

Как насчет этого?

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

Условие перемещается на другую строку, что может облегчить чтение.

13 голосов
/ 29 июня 2009
if( isNull(value1) ||
    isToLong(value1) ||
    hasBadFormat(valule1))
{
    doSomething();
}
else
{
    doSomethingElse();
}

Теперь вы легко видите истинный блок.

Конечно, я предпочитаю:

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

: -)

8 голосов
/ 29 июня 2009

Очевидное решение состоит в том, чтобы переместить открытую скобку на следующую строку, как и предполагал Бог!

</flamebait>

6 голосов
/ 23 июля 2015

Я предпочитаю эту альтернативу:

if(
    isValid = isNull(value1) ||
    isToLong(value1) ||
    hasBadFormat(valule1)
) {
    doSomething();
}
else {
    doSomethingElse();
}
2 голосов
/ 29 июня 2009

Это действительно зависит от предпочтений и условностей людей, с которыми вы работаете, но первые две - две наиболее распространенные формы, которые я видел. Я предпочитаю перемещать условные выражения в многострочные, только если они настолько длинные, что требуют прокрутки влево-вправо в моем идеале.

Вот как бы я это написал:

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

Если только это условие не достаточно длинное, чтобы заставить меня прокрутить, чтобы увидеть все это. Если нет, я бы сделал это:

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

И в этом случае, поскольку это кажется достаточно коротким, я бы сделал последнее.

1 голос
/ 29 июня 2009

Я склоняю операторов к началу строки, чтобы они все поднялись.

Итак, вот одно предложение:

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

Вот еще один:

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

(Для && это было бы, если (1 && a && b) и т. Д.)

Или это:

if
(
   isNull(value1)
   || isTooLong(value1)
   || hasBadFormat(valule1)
)
/* ...etc... */
0 голосов
/ 26 июня 2019

Я лично форматирую все мои if заявления, как это, независимо от длины:

if (isNull(value1) || isToLong(value1) || hasBadFormat(value1)) {
    doSomething();
} else {
    doSomethingElse();
}
0 голосов
/ 05 декабря 2014

Я, наверное, единственный, кто делает это таким образом. Он называется Horstmann Style, но я делаю это немного по-другому.

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