Skip to content

Instantly share code, notes, and snippets.

@saksmt
Last active August 29, 2015 14:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save saksmt/2f1ea5ab720fa51c067a to your computer and use it in GitHub Desktop.
Save saksmt/2f1ea5ab720fa51c067a to your computer and use it in GitHub Desktop.
Java Code Style (B52)

Именование

Общий Стиль

Никакие сокращения не допускаются.

Именование должно быть таким, что код легко понять и без коментариев.

Всё именование должно исходить из принципа удобства чтения. Код должен в итоге наиболее походить на английский текст.

Классы, интерфейсы, перечисления: 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-а, будет хорошо.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment