Привет, Хабр!
Давайте сегодня обсудим качественный код. Конечно, основные принципы очевидны: читаемость, поддерживаемость, эффективность. Но в этой статье я хочу поделиться не сухой теорией, а практическими приемами, которые мы с коллегами выработали в процессе наставничества над начинающими автотестировщиками. У нас сформировалось несколько рекомендаций и лайфхаков, о которых я расскажу далее.
1. Использование var (Java 10+)
Ключевое слово var
может ухудшить читаемость кода, поэтому в большинстве случаев рекомендуем его избегать. Конечно же, за исключением ситуаций, когда речь идет о локальных переменных, если их тип очевиден, а между местом объявления этой переменной и местом ее использования — не более одного экрана кода.
Примеры:
Плохо:
var result = someService.calculate();
Лучше:
CalculationResult result = someService.calculate();
2. Обработка ресурсов с try-with-resources
Для работы с ресурсами, реализующими AutoCloseable
, всегда предпочтительнее использовать try-with-resources
, чем ручное закрытие в finally
.
Пример:
try (InputStream input = new FileInputStream("file.txt")) {
}
3. Лямбды и функциональные интерфейсы вместо анонимных классов
Лямбда-выражения делают код более лаконичным и легко читаемым.
Пример:
Старый стиль:
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Clicked!");
}
});
С лямбдой:
button.addActionListener(e -> System.out.println("Clicked!"));
4. Stream API вместо циклов
Если использовать Stream API, улучшится читаемость, и вы сможете писать более декларативный код.
Пример:
List<String> filteredNames = names.stream()
.filter(name -> name.startsWith("A"))
.collect(Collectors.toList());
5. Многострочные строки ("""...""")
В Java 15+, если строки длинные, лучше использовать Text Block ("""..."""
) вместо экранированных строк.
Пример:
Менее читабельно:
String json = "{\"name\":\"John\", \"age\":30}";
Более читабельно:
String json = """
{
"name": "John",
"age": 30
}
""";
6. Временное сохранение изменений в Git (stash)
Если вам нужно переключиться на другую ветку, но изменения еще не готовы для коммита, используйте git stash
.
git stash save "WIP: refactoring service" # сохранить изменения
git stash list # список сохранённых изменений
git stash pop stash@{0} # восстановить изменения
git stash pop #если он один
git stash apply #применить без удаления из списка
(в отличие от pop)
7. Обработка исключений с Lombok (@SneakyThrows)
Аннотация @SneakyThrows
делает код чище, это избавит нас от избыточных try-catch
.
Пример:
Без Lombok:
try {
Files.readAllBytes(Paths.get("file.txt"));
} catch (IOException e) {
throw new RuntimeException(e);
}
С Lombok:
@SneakyThrows
public byte[] readFile() {
return Files.readAllBytes(Paths.get("file.txt"));
}
Если же вы пробрасываете исключения, выбирайте наиболее конкретные типы или создавайте свои.
8. Комментарии и документация
Хороший код должен быть самодокументируемым. В случае, если без комментариев не обойтись, используйте Javadoc.
Пример:
/**
* Вычисляет сумму двух чисел.
* @param a первое число
* @param b второе число
* @return сумма a и b
*/
public int add(int a, int b) {
return a + b;
}
9. Сообщения в утверждениях и исключениях
Всегда добавляйте информативные сообщения в assert
и исключения. Это существенно упростит отладку.
Пример:
Плохо:
if (user == null) {
throw new IllegalArgumentException();
}
Лучше:
if (user == null) {
throw new IllegalArgumentException("User must not be null");
}
И главное — всегда стремитесь к простоте и ясности. Хороший код — это продуманная структура, грамотное именование и внимательное отношение к деталям. Тогда его будет легко читать, дорабатывать и расширять вам и вашим коллегам.
Комментарии (4)
elusiveavenger
02.07.2025 14:36Не знаю как вы, но я, почему-то, всегда с подозрением отношусь к советам, которые говорят, что var - это плохо, а SneakyThrows - хорошо.
senchik
02.07.2025 14:36Хотел написать, но вы опередили) Поддержу. Похоже специально вредные советы дают)
SecondUniverse
02.07.2025 14:36Пишите лучше полезный и работающий. Можно не очень чисто. Всё равно проект через пять лет переписывать с нуля.
LeshaRB
Временное сохранение изменений в Git (stash)
А причем это к
Java. Практические советы по написанию чистого кода
А вот за это - Обработка исключений с Lombok (SneakyThrows)
Надо вообще по рукам бить... По логам потом как ошибку искать?
7 пункт специально пропущен? Или это фишка чистого кода?