Исключения и обработка ошибок в читаемом коде
Структуры в коде — Структуры данных; persistence — ORM.
Тема дополняет быстрый провал и отказ от null: ошибка — часть контракта, а не побочный if с магическим кодом возврата.
Классика Мартина (Clean Code) и практика индустрии сходятся — узкий try, осмысленные типы, без пустых catch.
Исключения — не поток управления
Использовать throw вместо обычных веток цикла — тот же запах, что goto. Ожидаемые бизнес-ситуации ("корзина пуста") часто лучше выражать Result, кодом возврата домена или Optional, а исключения оставить для нарушенных инвариантов и сбоев инфраструктуры.
Пустые и широкие catch
try {
parseDate(input);
} catch (Exception e) {
// пусто — пользователь не поймёт, лог пуст
}
На практике:
- не глотать исключения;
- маленький блок try — один уровень абстракции;
- перехватывать конкретные типы, не
Exception"на всякий случай".
Коды возврата vs исключения
В C и legacy API коды 0/-1 размазывают проверки. Замените на исключения или Result на границе модуля, чтобы внутри домена не было if (rc != OK) на каждом шаге.
Вложенность try/catch
"Стрелы" из try внутри try лечатся guard clauses и выделением методов — так же, как глубокие if.
Сообщения пользователю и безопасность
Не показывайте стек и внутренние детали конечному пользователю; логируйте полную ошибку на сервере. Связь с безопасностью (санитизация, утечки данных).
Для API — стабильные коды ошибок, correlation id в логах (наблюдаемость).
Ожидаемые случаи
Переписать исключения для ожидаемых отказов: "файл не найден" при экспорте отчёта — часть сценария, а не NullPointerException где-то глубоко.
Связь с null
NullReferenceException часто значит: в модели допустили null там, где нужен Optional или Null Object. Исправление типов обычно эффективнее try/catch вокруг каждого вызова.
На ревью
- Новый пустой
catch— отклонить. throws Exceptionв сигнатуре публичного API — уточнить контракт.- Бизнес-ветка через
throw new Exception("error")— заменить типизированным доменным исключением или Result.
Указатель тем — Справочник тем чистого кода. Полная теория (стек, фатальные сбои, отказоустойчивость сервисов) — Ошибки, исключения и отказоустойчивость. См. также тесты и глобалы.