Никакие сокращения не допускаются.
Именование должно быть таким, что код легко понять и без коментариев.
Всё именование должно исходить из принципа удобства чтения. Код должен в итоге наиболее походить на английский текст.
Классы, интерфейсы, перечисления: UpperCamelCase
.
Остальное (методы, переменные, поля, ...): camelCase
.
В случае с аббревиатурами следует не принимать это во внимание, например, класс HTTP запроса следует назвать HttpRequest
и никак иначе.
В случае обозначения типа - просто имя интерфейса, без префиксов и суффиксов.
В случае обозначения поведения - имя с суффиксом "able".
Пример:
interface User {}
interface Clickable {}
interface Displayable {}
interface Button implements Clickable, Displayable {}
Имя + префикс "Abstract" или семантически подходящий, например, "Base".
Пример:
abstract class BaseUser implements User {}
abstract class AbstractButton implements Button {}
abstract class AbstractVisitor {}
Просто имя класса, никаких суффиксов или префиксов. Если необходимо отметить, что класс является одной из реализаций, его следует поместить в пакет с названием "impl".
Пример:
class BigRedButton extends AbstractButton {}
class PrivilegedUser extends BaseUser {}
package visitor.impl;
class SomeVisitor extends AbstractVisitor {}
В идеальном случае большинство void
методов должны быть "Fluent".
Название должно отражать смысл. Например, методы доступа к булевой переменной:
interface Code {
boolean isGood();
Code setGood();
Code setGood(boolean good);
}
При смешивании названия с паттернами проектирования следует добавлять суффикс исходя из логики и здравого смысла.
Пример правильного использования:
class NodeVisitorFactory extends AbstractNodeVisitorFactory {
public NodeVisitor create(String visitorName) {
return getVisitorClassByName(visitorName).newInstance();
}
}
Пример не правильного использования:
class UserEntity {}
1 отступ = 4 пробела.
1 открытие блока ("{}") - увеличение отступа на единицу (на 4 пробела).
if (some) {
for (int i = 0; i < 10; i++) {
// do something
}
}
При использовании "Fluent Interface" отступ увеличивается на единицу + опционально следуя логике интерфейса.
QueryBuilder.create()
.select("*")
.from("table", "t")
.join("relation", "r")
.on("r.t_id = t.id")
.getQuery()
.getResult()
;
1 действие = 1 строка
Открывающие фигурные скобки должны находиться на той же строке.
При большом количестве входных параметров следует писать каждый параметр на отдельной строке.
Пример:
class Some {
public void doSome(
boolean flag,
Another another,
Service service,
User user
) {
if (flag) {
// ...
}
}
}
Пример (на весь стиль):
class Some {
private static final String someString = "Hello!";
public void doSome(boolean flag, int[] data) {
if (flag && data.length != 0) {
for (int i = 0; i < data.length; i++)
switch (data[i]) {
case 0:
flag = !flag;
// no break
case 1:
Another another = new Another(15, i);
break;
default: break;
}
}
} else if (someString.equals("Hello!")) {
try {
Another.doSomeWork();
} catch (SomeWorkFailedException e) {
e.printStackTrace();
}
}
}
}
Если есть необходимость писать комментарий в коде, значит код написан плохо и имеет смысл вынести часть кода в отдельный метод с "говорящим" названием.
В остальном следует использовать нотацию javadoc.
- В коде не допускается использование транслита и/или не английского языка. В случае недостатка знаний в английском обращаться сюда или к коллегам.
Если кто оформит в код стиль для idea и sonar-а, будет хорошо.