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/