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).
Этот принцип о том, что для изменения единственного элемента программы, нам должно потребоваться изменить код
только в одном месте. Другими словами, нам не нужно бегать по всему проекту в поисках мест, отвечающих за
поведение одного компонента. Код получается концентрированным, а не разбросанным и это уменьшает шансы что-то
упустить при изменениях.
Если вы замечаете один и тот же фрагмент кода встречается в нескольких местах,
значит скорее всего он нарушен, и стоит это поправить.