Привет, Хабр!

Давайте сегодня обсудим качественный код. Конечно, основные принципы очевидны: читаемость, поддерживаемость, эффективность. Но в этой статье я хочу поделиться не сухой теорией, а практическими приемами, которые мы с коллегами выработали в процессе наставничества над начинающими автотестировщиками. У нас сформировалось несколько рекомендаций и лайфхаков, о которых я расскажу далее.

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)


  1. LeshaRB
    02.07.2025 14:36

    1. Временное сохранение изменений в Git (stash)
      А причем это к
      Java. Практические советы по написанию чистого кода

    2. А вот за это - Обработка исключений с Lombok (SneakyThrows)
      Надо вообще по рукам бить... По логам потом как ошибку искать?

    3. 7 пункт специально пропущен? Или это фишка чистого кода?


  1. elusiveavenger
    02.07.2025 14:36

    Не знаю как вы, но я, почему-то, всегда с подозрением отношусь к советам, которые говорят, что var - это плохо, а SneakyThrows - хорошо.


    1. senchik
      02.07.2025 14:36

      Хотел написать, но вы опередили) Поддержу. Похоже специально вредные советы дают)


  1. SecondUniverse
    02.07.2025 14:36

    Пишите лучше полезный и работающий. Можно не очень чисто. Всё равно проект через пять лет переписывать с нуля.