
- •Введение
- •Зачем нужны соглашения по оформлению кода
- •Благодарности
- •Начальные комментарии
- •Операторы package и import
- •Объявление классов и интерфейсов
- •Отступы
- •Длина строк
- •Перенос строк
- •Комментарии
- •Оформление комментариев кода.
- •Блочные комментарии
- •Однострочные комментарии
- •Прицепные комментарии
- •Комментарии до конца строки
- •Комментарии для документирования
- •Объявления
- •Количество объявлений в строке
- •Размещение
- •Инициализация
- •Объявление классов и интерфейсов
- •Операторы
- •Простые операторы
- •Составные операторы
- •Оператор return
- •Операторы if, if-else, if-else-if-else
- •Оператор for
- •Оператор while
- •Оператор do-while
- •Оператор switch
- •Оператор try-catch
- •Пробелы
- •Пустые строки
- •Расстановка пробелов
- •Соглашение об именовании
- •Приёмы программирования
- •Доступ к переменным класса и экземпляра
- •Обращение к переменным и методам класса
- •Константы
- •Присваивание значений переменным
- •Разные приёмы программирования
Операторы package и import
Первой строчкой кода в большинстве файлов исходных кодов Java является оператор package. После него могут следовать операторы import. Например:
package java.awt;
import java.awt.peer.CanvasPeer;
Объявление классов и интерфейсов
Следующая таблица описывает из чего состоит объявление классов или интерфейсов, в том порядке, как они должны появиться. В разделе "Пример файла исходного кода на Java" ниже приведен образец с комментариями.
|
Составная часть объявления класса/интерфейса |
Примечания |
1 |
Документирующий комментарий класса/интерфейса (/**...*/) |
Смотрите раздел "Комментарии для документирования" ниже о том, что должно быть в этом комментарии. |
2 |
Оператор class или interface |
|
3 |
Если необходимо, то указать комментарий реализации класса/интерфейса (/*...*/) |
Здесь содержится любая дополнительная информация по классу или интерфейсу, которая не подходит для документирующего комментария. |
4 |
Переменные (поля) класса (статические) |
Сначала открытые (public), затем защищенные (protected) и, наконец, закрытые члены класса (private). |
5 |
Переменные (поля) экземпляра |
Сначала public, затем protected, после private. |
6 |
Конструкторы |
|
7 |
Методы |
Эти методы должны быть сгруппированы по функциональности, а не по области действия или доступности. Например, закрытый метод класса может находится между двумя открытыми. Цель - сделать проще чтение и ясность кода. |
Отступы
В качестве единицы отступа используется 4 пробела. Точное построение отступов (пробелы или табуляция) не определено. Табуляция должна быть установлена как 8 пробелов (не 4).
Длина строк
Избегайте строки длиннее 80 символов, так как они плохо обрабатываются многими терминалами и инструментами.
Примечание: примеры используемые в документации должны иметь более короткую длину строчек, как правило, не более 70 символов.
Перенос строк
Если выражение не умещается в одну строку, разбейте его, руководствуясь следующими основными принципами:
* Перенос после запятой
* Перенос перед оператором
* Предпочитаются высокоуровневые переносы, чем низкоуровневые.
* Выравнивайте новую строку выражения так, чтобы его начало было на том же уровне как и в предыдущей строке.
* Если приведенные выше правила приводят к сбивающему с толку коду или коду, который жмется к полям справа, просто сделайте вместо этого отступ в 8 пробелов.
Несколько примеров переноса строки в вызовах методов:
function(longExpression1, longExpression2, longExpression3,
longExpression4, longExpression5);
var = function1(longExpression1,
function2(longExpression2,
longExpression3));
Следующие два примера демонстрируют разбиение арифметического выражения. Первое предпочтительнее, с разрывом за пределами скобок, расположенных на верхнем уровне.
longName1 = longName2 * (longName3 + longName4 - longName5)
+ 4 * longname6; // РЕКОМЕНДУЕТСЯ
longName1 = longName2 * (longName3 + longName4
- longName5) + 4 * longname6; // ИЗБЕГАТЬ
Два следующих примера иллюстрируют отступы в объявлениях методов. первый случай обычный. Во втором случае следовало бы сдвинуть вторую и третью строки далеко вправо, если бы применялись обычные отступы. Вместо этого строки сдвинуты всего на 8 позиций.
//ОБЫЧНЫЕ ОТСТУПЫ
someMethod(int anArg, Object anotherArg, String yetAnotherArg,
Object andStillAnother) {
...
}
//ОТСТУП НА 8 СИМВОЛОВ, ЧТОБЫ ИЗБЕЖАТЬ ОЧЕНЬ ДЛИННЫХ ОТСТУПОВ
private static synchronized horkingLongMethodName(int anArg,
Object anotherArg, String yetAnotherArg,
Object andStillAnother) {
...
}
В условии оператора if следует в основном использовать 8-ми символьный отступ, т.к. если использование 4-х символьного отступа затруднит поиск тела оператора. Рассмотрим пример:
//НЕ ИСПОЛЬЗУЙТЕ ТАКИЕ ОТСТУПЫ
if ((condition1 && condition2)
|| (condition3 && condition4)
||!(condition5 && condition6)) { //Плохой перенос
doSomethingAboutIt(); //ОЧЕНЬ ЛЕГКО ПРОПУСТИТЬ ЭТУ СТРОЧКУ
}
//ИСПОЛЬЗУЙТЕ ТАКИЕ ОТСТУПЫ В ПОДОБНЫХ СЛУЧАЯХ
if ((condition1 && condition2)
|| (condition3 && condition4)
||!(condition5 && condition6)) {
doSomethingAboutIt();
}
// ИЛИ ИСПОЛЬЗУЙТЕ ЭТО
if ((condition1 && condition2) || (condition3 && condition4)
||!(condition5 && condition6)) {
doSomethingAboutIt();
}
Вот 3 приемлемых способа форматирования тернарных выражений:
alpha = (aLongBooleanExpression) ? beta : gamma;
alpha = (aLongBooleanExpression) ? beta
: gamma;
alpha = (aLongBooleanExpression)
? beta
: gamma;