JavaRush /Курсы /JAVA 25 SELF /Стиль и читаемость кода, code conventions

Стиль и читаемость кода, code conventions

JAVA 25 SELF
23 уровень , 4 лекция
Открыта

1. Введение

В программировании стиль — не про моду, а про выживание. Java — язык, на котором пишут огромные команды, и если каждый будет писать «как привык», то проект быстро превратится в набор несвязанных кусков, где разобраться сможет только автор (и то не всегда).

Стиль кода — это набор правил, которые делают код одинаково читаемым для всех. Это как дорожные знаки: если их игнорировать, движение быстро превратится в хаос.

Почему это важно?

  • Читаемость: код читают чаще, чем пишут. Плохой стиль — как плохой почерк у врача: никто не поймёт, что там написано.
  • Поддерживаемость: если код написан по правилам, его проще менять, меньше вероятность сломать что-то случайно.
  • Совместная работа: в команде все должны понимать друг друга без лишних вопросов.
  • Инструменты: автоформаттеры и анализаторы кода работают лучше, если стиль единый.

2. Основные ошибки стиля кода (и как их избежать)

Несоблюдение отступов и скобок

Ошибка:
Код без отступов и с хаотичными скобками мучителен для глаз и мозга.

if(x>0){
System.out.println("x положительный");
}else{
System.out.println("x не положительный");
}

Как надо:

if (x > 0) {
    System.out.println("x положительный");
} else {
    System.out.println("x не положительный");
}

Комментарий:
Используйте четыре пробела для каждого уровня вложенности (это стандарт Java). Табуляция — зло, если только вся команда не договорилась иначе.

Неправильные имена переменных, методов и классов

Ошибка:

int a = 5;
String s = "Вася";
void f() { /* ... */ }

Как надо:

int age = 5;
String userName = "Вася";
void printReport() { /* ... */ }

Комментарий:
Имена должны быть осмысленными и отражать суть переменной или метода.

  • Классы — с заглавной буквы, CamelCase: UserAccount.
  • Методы и переменные — с маленькой буквы, camelCase: calculateSalary, userList.

Слишком длинные методы и классы

Ошибка:
Метод на 100 строк, класс на 1000 строк — настоящий nightmare mode для поддержки.

Как надо:
Каждый метод должен делать что-то одно и быть коротким (идеально — помещаться на экран). Классы тоже не должны разрастаться до размеров «Войны и мира».

Пример:

Плохо:

public void processOrder() {
    // 200 строк кода
}

Хорошо:

public void processOrder() {
    validateOrder();
    calculateTotal();
    saveToDatabase();
    sendEmailConfirmation();
}

Использование «магических чисел» и строк

Ошибка:

if (status == 42) {
    // ...
}

Как надо:

public static final int STATUS_APPROVED = 42;

if (status == STATUS_APPROVED) {
    // ...
}

Комментарий:
Вместо «магических» чисел и строк используйте константы (static final). В новых версиях Java для этого есть и enum — используйте их для ограниченных наборов значений.

Комментарии: отсутствие или избыточность

Ошибка 1:
Нет комментариев вообще — непонятно, что делает сложный код.

Ошибка 2:
Комментарии к каждому действию, даже очевидному.

// Увеличиваем x на 1
x = x + 1;

// Проверяем, равен ли x 10
if (x == 10) {
    // ...
}

Такие комменты только мешают! Комментируйте только сложные или неочевидные моменты. А вообще хороший код должен быть понятен без комментариев — комментарии нужны для пояснения «почему», а не «что».

// Учитываем скидку для VIP-клиентов
double total = calculateTotalWithDiscount();

3. Конвенции Java: как пишут профессионалы

В Java есть официальные и де-факто стандарты оформления кода. Oracle Java Code Conventions и Google Java Style Guide — самые популярные.

Отступы и скобки

Открывающая фигурная скобка ставится на той же строке, что и объявление:

public void print() {
    // ...
}

Вложенность — четыре пробела.

Именование

  • Классы и интерфейсы: CamelCase с заглавной буквы (Person, UserAccount).
  • Методы и переменные: camelCase с маленькой (calculateSalary, userList).
  • Константы: ВСЕ_ЗАГЛАВНЫЕ_БУКВЫ_С_ПОДЧЕРКИВАНИЕМ (MAX_SIZE, DEFAULT_TIMEOUT).
  • Пакеты: только маленькие буквы, могут быть с точками (com.example.project).

Пробелы

Пробелы вокруг операторов и после запятых:

int sum = a + b;
System.out.println(name, age);

Не ставьте пробел после открывающей и перед закрывающей скобки:

if (x > 0) { ... }

Длина строки

Рекомендуется не превышать 100–120 символов в строке. (Да-да, монитор у вас огромный, но код всё равно лучше читается, когда он не уходит за горизонт.)

Порядок объявления членов класса

Рекомендуемый порядок (по Oracle):

  1. Поля (сначала статические, потом обычные)
  2. Конструкторы
  3. Методы

Пример:

public class User {
    private static int userCount;
    private String name;

    public User(String name) {
        this.name = name;
        userCount++;
    }

    public String getName() {
        return name;
    }
}

4. Пример: рефакторинг плохого стиля

Вот пример класса, который может встретиться в дикой природе:

class person{String n;int a;void p(){System.out.println(n+" "+a);}}

Где-то в офисе от этого кода плачет один Java-разработчик.

Давайте улучшим его:

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void print() {
        System.out.println(name + " " + age);
    }
}

Что изменилось:

  • Класс и члены с правильными модификаторами доступа.
  • Имена осмысленные, читаемые.
  • Каждый член класса с новой строки.
  • Используется конструктор для инициализации.
  • Поля private, чтобы соблюсти инкапсуляцию.

5. Полезные нюансы

Автоформаттеры

Современные IDE (IntelliJ IDEA, Eclipse, VS Code) умеют автоматически форматировать код по стандарту.

Горячие клавиши:

  • IntelliJ IDEA: Ctrl + Alt + L
  • Eclipse: Ctrl + Shift + F

Статический анализ

Инструменты типа Checkstyle, SonarLint, PMD помогают выявлять нарушения стиля и потенциальные ошибки ещё до запуска программы.

Как это выглядит:

  • Checkstyle ругается, если у вас переменная называется x вместо userAge.
  • SonarLint подскажет, если метод слишком длинный или класс нарушает принципы SOLID.

Разделение ответственности и «чистый» код

  • Каждый класс должен отвечать только за одну задачу (Single Responsibility Principle).
  • Не бойтесь создавать дополнительные классы и методы — это не «раздувание», а забота о будущем читателе.
  • Старайтесь избегать дублирования кода: если видите два похожих фрагмента — вынесите их в отдельный метод.

Константы и «магические числа»: как правильно

Вместо:

double price = 100 * 0.18;

Лучше:

public static final double VAT_RATE = 0.18;
double price = 100 * VAT_RATE;

А если у вас часто встречаются фиксированные наборы значений — используйте enum:

public enum Status {
    NEW, IN_PROGRESS, DONE
}

6. Типичные ошибки в стиле и читаемости кода

Ошибка №1: Игнорирование code conventions.
Если в команде нет единого стиля, код быстро становится нечитабельным и сложным для поддержки. Даже если вы пишете в одиночку, через год вы сами скажете себе спасибо.

Ошибка №2: Слишком короткие/длинные имена.
Переменная a или temp — плохо. Переменная theCurrentUserNameThatIsUsedForAuthorizationInTheSystem — тоже не надо. Найдите баланс: userName, age, bookList.

Ошибка №3: «Магические числа».
Вставка чисел и строк прямо в код мешает поддержке и увеличивает вероятность ошибок.

Ошибка №4: Огромные методы и классы.
Чем больше метод — тем сложнее его тестировать и понимать. Разбивайте на логические части.

Ошибка №5: Плохая структура класса.
Поля разбросаны где попало, методы объявлены в случайном порядке — всё это мешает быстро найти нужное место.

Ошибка №6: Избыточные или отсутствующие комментарии.
Комментарий «инициализация переменной» рядом с int x = 0; не нужен. Комментарий, объясняющий сложную бизнес-логику, — очень нужен.

Ошибка №7: Несогласованное форматирование.
В одной части проекта — четыре пробела, в другой — табуляция, тут скобки на новой строке, там — на старой. Это выглядит неряшливо и раздражает коллег.

1
Задача
JAVA 25 SELF, 23 уровень, 4 лекция
Недоступна
Наводим порядок в запущенном коде 🧹
Наводим порядок в запущенном коде 🧹
1
Задача
JAVA 25 SELF, 23 уровень, 4 лекция
Недоступна
Ясные имена для ясности системы 💬
Ясные имена для ясности системы 💬
1
Задача
JAVA 25 SELF, 23 уровень, 4 лекция
Недоступна
Налоговая ставка: Больше никаких "магических чисел"! 💸
Налоговая ставка: Больше никаких "магических чисел"! 💸
1
Задача
JAVA 25 SELF, 23 уровень, 4 лекция
Недоступна
Идеальная структура для вашего продукта 📦
Идеальная структура для вашего продукта 📦
1
Опрос
ООП — типичные ошибки, 23 уровень, 4 лекция
Недоступен
ООП — типичные ошибки
ООП — типичные ошибки
Комментарии (3)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Zlyden' Уровень 61
22 ноября 2025
"В одной части проекта — четыре пробела, в другой — табуляция" - ну это для Java вообще не проблема же. Это у питонистов интерпретатор будет ругаться, если в одном файле есть и то и другое...
Xaxatumba Уровень 38
14 ноября 2025
Вы точно утверждаете, что возникает исключение

NullPointerException
Если попробовать проделать такое в IDEA то произойдёт Ошибка компиляции:

public class Main {
    public static void main(String[] args) {
        String oblako;
        int length = oblako.length();
        System.out.println(length);
    }
}
Исключение не возникает даже если создать объект без инициализации. Даже если в ваше среде разработки попытаться выполнить сие действие вылезете ошибка компиляции
qaruller Уровень 24
17 января 2026
Да, NPE будет если присвоить значение null переменной и вызвать через неё метод