Второй стиль требует 8 пробелов перед строками продолжения.
// INDENT 8 SPACES TO AVOID VERY DEEP INDENTS private static synchronized horkingLongMethodName(int anArg, Object anotherArg, String yetAnotherArg, Object andStillAnother) { ... }
Первый стиль предпочтительней, так как читается лучше.
Ниже приведены два примера вызовов методов:
function(longExpression1, longExpression2, longExpression3, longExpression4, longExpression5);
var = function1(longExpression1, function2(longExpression2, longExpression3));
В следующих примерах переносятся арифметические выражения. Способ в первом примере предпочтительней, так как разрыв расположен вне скобок, т.е. на более высоком уровне вложенности.
longName1 = longName2 * (longName3 + longName4 - longName5) + 4 * longname6; // PREFER
longName1 = longName2 * (longName3 + longName4 - longName5) + 4 * longname6; // AVOID
Ниже приведены три приемлемых способа форматирования тернарных выражений:
alpha = (longBooleanExpression) ? beta : gamma;
alpha = (longBooleanExpression) ?
beta : gamma;
alpha = (longBooleanExpression) ? beta : gamma;
Комментарии документатора описывают классы Java, интерфейсы, конструкторы, методы и поля – по одному комментарию на каждое объявление. Комментарий должен располагаться непосредственно перед объявлением:
/** * The Example class provides ... */ class Example {
Заметьте, что классы и интерфейсы не имеют сдвига, так же не имеет сдвига и первая строка их комментария. Последующие строки комментария сдвигаются на 1 символ, чтобы выровнять все звездочки по вертикали.
Комментарии членов, включая конструкторы, имеют сдвиг первой строки на 4 символа, а прочих строк - на 5.
Рекомендуется одно объявление в строке, поскольку это облегчает чтение кода, его документирование и рефакторинг.
Другими словами следует писать
int level; int size;
а не
int level, size; // WRONG!
Располагайте объявления только в начале блоков (блок –
это фрагмент кода, окруженный фигурными скобками "{
" и "}
").
void myMethod() { int int1; // beginning of method block if (condition) { int int2; // beginning of "if" block ... } }
Не откладывайте объявления переменных до их первого использования, исключением здесь является только объявление управляющей переменной цикла for:
for (int i = 0; i < maxLoops; i++)
{
...
Избегайте локальных объявлений, которые скрывают объявления верхних уровней, не объявляйте одноименных переменных во внешнем и внутреннем блоках.
int count; ... int method() { if (condition) { int count; // AVOID! ... } ... }
Старайтесь инициализировать локальные переменные при объявлении. Единственная причина не делать этого - зависимость начального значения переменной от каких-то вычислений.
Каждая строка кода должна содержать не более одного оператора. Это улучшает читабельность и упрощает отладку.
Пишите:
argv++; argc--; // CORRECT
Вместо:
argv++; argc--; // AVOID!
Это те, которые содержат последовательность операторов, заключенную в фигурные скобки. Внутренние операторы должны располагаться с одним отступом по отношению к фигурным скобкам.
{ int value = getValue(); doSomethingWithValue(value); }
Открывающая скобка должна быть в строке, следующей за начальной строкой составного оператора.
for (int i=0; i < list.size(); i++) { ... }
Скобки ставятся всегда, даже
вокруг единственного оператора, если он входит в управляющую конструкцию, такую
как if-else
или for-
оператор.
Это уменьшает вероятность ошибки при добавлении внутренних операторов.
Пишите
if (object == null) { return; //CORRECT }
вместо
if (object == null) return; // WRONG!
Оператор
return
Выражение оператора return обычно не берется в скобки, за исключением случаев, когда скобки делают оператор более читабельным.
Пример:
return; return myDisk.size(); return (size ? size : defaultSize);
Операторы
if-else, if-else-if-else
Условный оператор имеет две формы:
if (condition) { statements; }
if (i < 0) { statements; } else { statements; }
В конструкции if-else-if
второй и
последующие if
располагаются в одной строке с else
.
if (condition) { statements; } else if (condition) { statements; } else if (condition) { statements; }
Оператор
for
Оператор for должен иметь следующую форму:
for (initialization; condition; update)
{ statements; }
Пустой оператор for
(в котором всю
работу выполняют выражения инициализации, условия и замены) имеет следующую
форму:
for (initialization; condition; update);
Оператор
while
Оператор while
должен иметь
следующую форму:
while (condition) { statements; }
Пустой оператор while пишется так:
while (condition);
Оператор
do-while
Оператор do-while
должен
иметь следующую форму:
do { statements; } while (condition);
Оператор
switch
Оператор switch
должен иметь
следующую форму:
switch (condition) { case ABC: statements; /* falls through */ case DEF: statements; break; case XYZ: statements; break; default: statements; break; }
Каждый раз, когда оператор case не оканчивается оператором breake, добавляйте комментарий в то место, где обычно располагается оператор breake.
Не отделяйте продолжающийся case от следующего пустой строкой. Это подчеркнет тот факт, что два блока кода выполняются совместно.
Каждый switch
оператор
должен включать оператор default.
Оператор break в нем избыточен, но его следует писать, чтобы предупредить
возможность ошибки при добавлении новых операторов case после default.
try-catch-finally операторы должны иметь следующий формат:
try { statements; } catch (ExceptionClass e) { statements; } finally
{ }
Имена классов должны быть существительными или основаны на существительных, не слишком длинными, написанными в стиле «верблюд» и начинаться с прописной буквы.
Старайтесь делать имена классов простыми и информативными
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.