TGViewer
10 минут до кода 10 минут до кода @ten_minutes_to_code · 228 subscribers
Post #104 73
Почему пустой Catch — это технический суицид

Существует мнение, что Try/Catch — это признак плохого тона. Якобы, если ты используешь эту конструкцию, значит, заранее расписываешься в том, что твой код может упасть с ошибкой.

В идеальном мире это, может, и так, но в реальности мы работаем в агрессивной среде. У нас есть внешние API, сторонние библиотеки и сеть, которая имеет свойство отваливаться в самый неподходящий момент. Мы не контролируем всё окружение, поэтому Try/Catch — это не костыль, а механизм выживания системы.

Проблема не в самой конструкции, а в том, как её превращают в «глушитель».

Антипаттерн «Изолента»

Самый лютый грех, который я вижу на ревью — это пустой блок Catch. Разработчик видит, что кусок кода падает, не может (или не хочет) разобраться в причинах и просто оборачивает его в Try, оставляя обработчик ошибки пустым.

Это чистой воды технический суицид. Представьте, что в машине загорелся значок Check Engine. Вместо того чтобы ехать в сервис, вы просто заклеиваете лампочку черной изолентой. Машина продолжает ехать? Да. Но прямо сейчас внутри двигателя может происходить катастрофа, которая через сто километров превратит машину в груду металлолома.

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

Стратегия официанта

Адекватный инженер использует стратегию «официанта». Если на кухне произошел факап и блюдо сгорело, хороший официант не делает вид, что всё в порядке, вынося пустую тарелку. Он подходит, извиняется, объясняет причину и предлагает альтернативу.

В коде это реализуется через три обязательных шага в блоке Catch:

1. Сбор контекста: Логируем всё, что поможет расследовать инцидент — Payload запроса, ID пользователя, состояние переменных.
2. Обработка: Мы либо прокидываем ошибку выше по стеку, если не можем её решить здесь, либо подготавливаем объект-результат, который система сможет адекватно прочитать.
3. Понятный ответ: Если ошибка долетает до интерфейса, пользователь не должен видеть Unexpected variable или NullPointerException. Ему нужно выдать адекватный статус: «Сервис временно недоступен, попробуйте позже».

Исключение vs Валидация

Нужно четко разделять, где нам нужен Try/Catch, а где достаточно обычного if. Try/Catch предназначен для *исключительных* ситуаций: диск переполнен, база данных ушла в ребут, отвалился внешний шлюз.

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

Ставь 🔥, если теперь будешь пользоваться try/catch осознанно. А если остались вопросы или что-то звучит слишком абстрактно — пиши в комменты, обязательно разберем!

10МДК | ВЕБМастер
  • 🔥 7
More from @ten_minutes_to_code
  1. May 28, 2026Первый сезон получился про путь “от пользователя к инженеру”. Именно эту картину мы весь с…
  2. May 28, 2026Когда я запускал этот канал, у меня была довольно простая идея: писать каждый день коротки…
  3. May 7, 2026Почему нормализация БД — это чистая логика, а не бюрократия На любом ongoing-проекте требо…
  4. May 3, 2026🤔 А где новые посты? Сори что вот так пропал без предупреждения, но я думал что справлюсь…
  5. Apr 29, 2026Почему HTTPS не спасет ваши секреты Замочек в адресной строке браузера — это мощное успоко…
  6. Apr 28, 2026Целостность данных против иллюзии атомарности Начинающий разработчик видит базу данных как…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →