Если вы разбиваете длинные строки кода, как сделать отступ в следующей строке? - PullRequest
38 голосов
/ 31 марта 2009

Иногда вам приходится писать в своем источнике длинные строки, которые лучше разбить. Как вы отступаете от этого?

Вы можете сделать отступ одинаковым:

very long
statement;
other statement;

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

very long
   statement;
other statement;

Это облегчает, но может случиться так, что длинная строка - это начало вложенного блока, который вы хотите сделать отступ, например:

if ((long test 1) &&
   (long test 2) &&
   (long test 3)) {
   code executed if true;
}

В этом случае снова трудно читать. Третья возможность, о которой я могу подумать, это вообще не прерывать длинные строки, современные редакторы могут справиться с этим и создавать мягкие разрывы строк. Но с другим редактором вы должны прокручивать вбок и не можете влиять на позицию, редактор прерывает вашу длинную линию.

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

Ответы [ 15 ]

1 голос
/ 31 марта 2009

Я бы сказал, что не имеет значения, какой метод вы используете, если он соответствует следующим критериям:

  • толково
  • Вы применяете одно и то же соглашение по всему коду.

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

1 голос
/ 31 марта 2009

С astyle или любым другим автоматическим индентором, который вы используете. Похоже, что он достаточно хорош, и есть более важные вещи, о которых стоит подумать.

0 голосов
/ 09 марта 2018

Для Java Oracle предоставляет эти соглашения. Соглашения по Java Code - Oracle.

  • Разрыв после запятой
  • Перерыв перед оператором
  • Предпочитать перерывы более высокого уровня перерывам более низкого уровня
  • Выровнять новую строку с началом выражения на том же уровне на предыдущей строке
  • Если приведенные выше правила приводят к путанице в коде или к коду, который упирается в правое поле, просто вместо 8 отступов

Например,

longName1 = longName2 * (longName3 + longName4 - longName5)
            + 4 * longname6; // PREFER
longName1 = longName2 * (longName3 + longName4
                        - longName5) + 4 * longname6; // AVOID

Другое:

//DON’T USE THIS INDENTATION
if ((condition1 && condition2)
    || (condition3 && condition4)
    ||!(condition5 && condition6)) { //BAD WRAPS
    doSomethingAboutIt(); //MAKE THIS LINE EASY TO MISS
}
//USE THIS INDENTATION INSTEAD
if ((condition1 && condition2)
        || (condition3 && condition4)
        ||!(condition5 && condition6)) {
    doSomethingAboutIt();
}
//OR USE THIS
if ((condition1 && condition2) || (condition3 && condition4)
        ||!(condition5 && condition6)) {
    doSomethingAboutIt();
}

Дополнительные примеры приведены в этом документе.

0 голосов
/ 31 марта 2009

Я почти никогда не делаю отступ в одной строке. Тем не менее, я очень редко повторяю инициализацию группы переменных, подобных этой

a 
= b
= c
= d
= e
= f
= 0;

Единственная ключевая вещь при выполнении чего-то подобного - сохранить оператор присваивания в качестве первого символа в следующей строке. Это даст поддержку. У программиста наступает момент WTF, когда они видят это, заставляя их смотреть, а не просто приукрашивать.

Завершая очень длинное утверждение, я сделаю это там, где я чувствую, что это имеет смысл ... не обязательно в первом абзаце. Итак:

reallyLongMethodName (paramA,paramB,paramC);

не будет отформатирован как

reallyLongMethodName (paramA,
    paramB,
    paramC);

но в конечном итоге будет больше похоже на

reallyLongMethodName (paramA,
                    paramB,
                    paramC);

со всеми параметрами, совпадающими с открывающей скобкой.

Если бы и пока, я бы сделал что-то вроде

if((long test 1) 
&& (long test 2) 
&& (long test 3))
{
    code executed if true;
}
0 голосов
/ 31 марта 2009

На мой взгляд, ширина строки в 78 или 80 символов полезна, так как облегчает одновременное открытие нескольких файлов рядом на одном экране.

Обоснование, а как насчет цитаты Линуса Торвальдса ? :)

Ответ на этот вопрос заключается в том, что если вам нужно более 3 уровней отступа, ты все равно облажался и должен исправить ваша программа.

Обычно я придерживаюсь конгломерата Google C ++ стиля кодирования (я думаю, вы также можете адаптировать его для Java) и этого стиля C ++ .

...