Оформление кода

Или что бы у других кровь из глазок не капала

Назад На главную

Google Java Style Guide

Очень важно, чтобы код выглядел опрятно и в едином стиле, т.к. это залог успешного взаимодействия внутри и между командами разработчиков. Если вы хотите увидеть все правила разом, то прилагаю ссылку .

Читать её от корки до корки, сейчас не стоит, но будет здорово если посмотрите пункты 4 и 5.

В IDEA есть функция, которая сделает за вас часть работы по форматированию: выделите фрагмент кода мышкой или Ctrl+A, и потом нажмите Ctrl+Alt+L - код должен автоматически выровняться. Нажатие без выделения отформатирует весь текст в файле.

Код и нейминг

Переменные называются существительными

Нельзя назвать переменные глаголами или начинать с глагола

private isBlocked; // очень плохо, начало с глагола

private blocked; // тоже плохо, т.е. тоже глагол

private block; // OK!

Методы всегда следует называть с маленькой буквы (кроме конструкторов) и в названии должен быть глагол - sendMail, getAge, calculateSalary и т.п.

Если метод возвращает сложную структуру вроде Map, то в методе следует пояснить, что в ключах и в значениях, если это не очевидно:

public Map<Integer, Integer> getBalancesByAccountIds() {

...

}

Если метод печатает что-то на экран, можно начать его со слова print:

public void printAge() {

System.out.println("My age is " + age);

}

Метод-геттер, возвращающий boolean принято называть с префиксом is или has. Пример:

boolean isAlive() {

...

}

Примеры неудачных названий методов:

public Map<Integer, Integer> getMap() {

...

}

Этот метод плохо называется, т.к. мы не получаем никакой смысловой информации что он делает и что возвращает. То что он возвращает тип Map видно и так из типа возвращаемого значения. Но что в ключах, а что в значениях… Непонятно

Второй пример:

public boolean checkBalance(int balance) {

...

}

Слово check очень перегруженное. Из имени совершенно не ясно что делает проверка, и что будет если она не пройдет.

Более удачные имена:

public boolean isBalancePositive(int balance) {

...

}

Выбор понятного имени - довольно сложная задача, и иногда, если совершенно не получается придумать имя, то это знак того что метод делает слишком много и его следует разбить на более мелкие части.

Посмотрите главу 2 в этой книжке - она вся про культуру именования

кому лень читать - смотрите

Чистые функции

В программировании есть понятие чистая функция.

Чистая функция это функция удовлетворяющая двум условиями:

Например:

class Foo {

private static int d = 1;

// чистая функция.

int pureFunction(int x) {

return x > 0 ? x * x : 0;

}

// не чистая (меняется d)

int impureFunction1(int x) {

d--;

return x > 0 ? x * x : 0;

}

// тоже не чистая: одинаковые аргументы необязательно

// приводят к одинаковому результату (это зависит от d)

int impureFunction(int x) {

return d > 0 ? x * x : 0;

}

// тоже не чистая: изменяется внешнее состояние -

// - текст вывелся на экран.

int anotherImpure(int x) {

System.out.println("Method was called");

return x;

}

}

С чистыми функциями работать - одно удовольствие. Их очень легко тестировать, отлаживать в дебаггере, а также переиспользовать. Их можно вызывать любое число раз не опасаясь последствий. В чисто-функциональных языках программирования, например в haskel все функции чистые, а код, который работает с вводом-выводом вынесен в отдельные изолированные участки кода (монады).

Классическое описание

Тут видео на эту тему

DRY или "Не повторяйся"

Есть принцип "DRY".

Он расшифровывается как "Не повторяйся" (Don't repeat yourself).

Этот принцип о том, что для изменения единственного элемента программы, нам должно потребоваться изменить код только в одном месте. Другими словами, нам не нужно бегать по всему проекту в поисках мест, отвечающих за поведение одного компонента. Код получается концентрированным, а не разбросанным и это уменьшает шансы что-то упустить при изменениях.

Если вы замечаете один и тот же фрагмент кода встречается в нескольких местах, значит скорее всего он нарушен, и стоит это поправить.

Boolean в методах

Если boolean переменная передается в метод как аргумент - "... это зло!!!"

Можно использовать на начале разработки, но потом обязательно рефакторить в ENUM.

Подробности читайте тут

Рефакторинг

Для начала следим да следующим:

Магические числа

Мертвый код

Комментарии

Простой строчный комментарий

Обычно для комментария реализации

// текст комментария

Блок с комментарием

вложения не допускаются

/*

текст комментария

*/

Документационный комментарий (см. JAVA Docs)

Отображается когда наводишь на класс

/**

* текст комментария

* описание работы и и т.п.

* @param a - первый параметр

* @param b - второй параметр

* @return - возвращаемый результат

*/

Ссылка на класс

{@link package.class label}

Ссылка на метод или переменную в классе

{@link package.class#member label}