Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: error handling, exceptions, API design, null object pattern, return values

Когда стоит возвращать пустой результат, а когда выбрасывать исключение?

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

Короткий ответ

Возвращать пустой результат (например, null, пустой массив, Optional.empty()) стоит, когда отсутствие данных является ожидаемым и нормальным состоянием в контексте бизнес-логики. Выбрасывать исключение следует, когда произошла непредвиденная ошибка, нарушение контракта или состояние, которое программа не может корректно обработать. Например, поиск пользователя по ID: если пользователь не найден — это может быть нормально (возвращаем null), а если база данных недоступна — это исключительная ситуация (бросаем исключение).

Длинный ответ

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

Когда возвращать пустой результат

Пустой результат (null, пустая коллекция, специальный объект вроде Optional.empty) сигнализирует, что операция завершилась штатно, но искомые данные отсутствуют. Это часть нормального потока выполнения программы.

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

Когда выбрасывать исключение

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

  • Примеры: Сбой подключения к базе данных, передача невалидных аргументов (например, null, когда ожидается объект), нарушение бизнес-правил, которые должны гарантироваться.
  • Преимущество: Позволяет отделить обработку ошибок от основной логики, часто приводит к более чистому коду.

Практический пример на Java

public class UserRepository {
    // Возврат Optional — ясная семантика: пользователь может отсутствовать.
    public Optional findUserById(Long id) {
        // ... выполнение запроса к БД
        if (userFound) {
            return Optional.of(user);
        } else {
            return Optional.empty(); // Ожидаемый случай: нет пользователя.
        }
    }

    // Выброс исключения при нарушении контракта или сбое системы.
    public User getUserById(Long id) throws DatabaseException {
        if (id == null) {
            throw new IllegalArgumentException("ID cannot be null");
        }
        try {
            // ... выполнение запроса к БД
            if (userFound) {
                return user;
            } else {
                throw new EntityNotFoundException("User with id " + id + " not found");
            }
        } catch (SQLException e) {
            // Непредвиденная ошибка инфраструктуры.
            throw new DatabaseException("Failed to fetch user", e);
        }
    }
}

Вывод: Используйте возврат пустого результата для ожидаемых "отсутствующих" состояний в рамках бизнес-логики. Применяйте исключения для обработки реальных ошибок, сбоев и нарушений предварительных условий, которые требуют отдельного внимания или аварийного завершения операции.

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • JavaScript

    JavaScript

  • Java

    Java

Ключевые слова

#error handling

#exceptions

#API design

#null object pattern

#return values

Подпишись на Python Developer в телеграм