Java Coding Conventions
Download
Report
Transcript Java Coding Conventions
Конвенции
кодирования на Java
Code Conventions for Java
Бреслав А. А.
Зачем нужны конвенции
кодирования
Хороший стиль
Конвенции
разработаны на основе опыта
многих программистов
Чтение кода
Не
нужно привыкать к чужому коду
Модификация кода
Каждый
может вносить изменения, не
перестраиваясь
Code Conventions for Java
http://java.sun.com/docs/codeconv/
Разработан специально для Java
Разработчик
Единый стандарт
Соблюдают
– Sun Microsystems
не все, но большинство
Поддерживается средами разработки
Структура CCJ
Имена файлов
Организация файла
Отступы
Комментарии
Декларации
Предложения языка (statements)
Пустое место (white space)
Конвенции именования
Идиомы (programming practices)
Имена файлов
Расширения:
Файлы
с исходным кодом: *.java
Файлы с байт-кодом: *.class
Организация файла
Файл разделяется на секции
Секции
отделяются друг от друга пустой
строкой и, возможно, комментарием
Размер файла не должен превосходить
2000 строк
Организация файла - классы
В одном файле может находиться
только один public-класс (интерфейс)
Допускается размещение в том же
файле других классов, логически
связанных с основным
Основной класс должен быть первым в
файле
Организация файла - секции
Начальный комментарий
/*
* Classname
* Version information
* Date
* Copyright notice
*/
Пакет и импорты
package java.awt;
import java.awt.peer.CanvasPeer;
Организация файла – структура
класса
JavaDoc-комментарий (/** */)
Заголовок класса
Комментарий к реализации (/* */)
Статические поля
Нестатические поля
Конструкторы
Методы
Отступы
Единица отступа – 4 пробела
допустима
Длина строки – не более 80 символов
иначе
и табуляция
может не влезать на экран
Перенос
после запятой
перед оператором
отступает
от исходной строки
Комментарии
Блочный комментарий
/*
* Here is a block comment.
*/
Однострочный комментарий (/* */)
/* Do something */
doIt();
Однострочный комментарий (//)
// Do something
doIt();
return true; // Why here
JavaDoc-комментарий
классы/интерфейсы
public и protected методы
и поля
Декларации
Одна декларация на строке
int
int
a, b; // плохо
a;
int b; // лучше
Инициализация на месте
int
a = 239; // еще лучше
Размещение
Как можно ближе к месту использования
Область видимости - как можно более узкая
Повторение имен
Одно
имя не должно закрывать другое:
переменная и поле
Декларации членов класса
Пробел между именем метода и «(» не ставится
void doIt()
Фигурная скобка «{» ставится на той же строке через
пробел
void doIt() {
Фигурная скобка «}» начинает новую строку на том
же уровне, что и заголовок метода
void doIt() {
// ...
}
Декларации методов разделяются пустыми строками
Предложения языка (statements)
Простые предложения
a++;
b++; // хорошо
a++; b++; // плохо
Сложные предложения – { … }
Содержимое отступает на один уровень
Скобки – как для методов
Операторные скобки используются для ВСЕХ структурных
операторов: if-else, while, do-while, for, switch
if (condition) {
doIt(); // даже если тело состоит из 1 строки
}
Предложение return
Скобки вокруг возвращаемого
выражения обычно не ставятся
return
disk.getSize();
Предложение if
if (condition) {
statements;
}
if (condition) {
statements;
} else {
statements;
}
Предложение if – каскад
if (condition) {
statements;
} else if (condition) {
statements;
} else {
statements;
}
Еще раз: скобки
Не делайте так:
if (condition)
statement;
Делайте так:
if (condition) {
statement;
}
Циклы for
for (initialization; condition; update) {
statements;
}
for (initialization; condition; update);
Циклы while
while (condition) {
statements;
}
while (condition);
do {
statements;
} while (condition);
Предложение switch
switch (condition) {
case ABC:
statements;
/* falls through */
case DEF:
statements;
break;
case XYZ:
statements;
break;
default:
statements;
break;
}
Предложение try-catch
try {
statements;
} catch (ExceptionClass e) {
statements;
}
Предложение try-catch-finally
try {
statements;
} catch (ExceptionClass e) {
statements;
} finally {
statements;
}
Пустое место - строки
Пустые строки
две
строки разделяют
объявления классов/интерфейсов
одна
строка
между методами
перед комментарием
между секциями кода внутри метода
Пустое место - пробелы
Между ключевым словом и скобкой
После запятой в списке параметров
a += b + c;
После «;» в заголовке for
doIt(a, b, c);
Вокруг бинарной операции (кроме «.»)
while (condition) {
for (int i = 0; i < 5; i++)
После операции приведения типа
(int) value
Пустое место – нет пробелов
Между именем метода и скобкой
doIt(a, b, c);
Перед/после унарной операции
a++;
--b;
Конвенции именования
По имени должно быть ясно, что мы
видим перед собой:
– пакет
Thing, MyClass – класс/интерфейс
run(), doSomething() – метод
i, myValue – поле/переменная
THE_CONSTANT – константа
ru.amse.mypackage
Идиомы
Сокрытие полей
Вызов статических методов
classMethod();
// хорошо
AClass.classMethod(); // хорошо
anObject.classMethod(); // плохо
Использование именованных констант
-1,
0, 1 – допустимы
Идиомы – присваивания
Избегать каскадных присваиваний
fooBar.fChar
Не использовать «=» там, где его легко
спутать с «==»
if
= barFoo.lchar = 'c';
(c = d) {
Не злоупотреблять возвращаемым
значением
d
= (a = b + c) + r;
Идиомы – скобки
Использовать скобки в условиях
if
(a == b && c == d) {
if ((a == b) && (c == d)) {
Использовать скобки в тернарном
операторе
(x
>= 0) ? x : -x;
Идиомы – возврат значения
if (booleanExpression) {
return true;
} else {
return false;
}
return booleanExpression
if (condition) {
return x;
}
return y;
return (condition ? x : y);
Code Conventions for Java
http://java.sun.com/docs/codeconv/