Про обработку исключений в работе программы
Я на протяжении всей жизни встречаю повальное непонимание природы исключений и важности работы с ними 😑
Давайте разберемся!
Программа: это алгоритм, который работает с данными. Все, только алгоритм и данные (дада, посты в соцсети, видосы, показатели с периферийных устройств, кнопки, которые ты нажал в игре и урон с ульты в доте — это все данные).
Алгоритм: это заранее предопределенная последовательность действий над данными, которые программа получила на вход. Ну и конечно дальше програмама выводит эти данные: на экран, сохраняет в бд, передает на физическую перефирию, которая приводит в движение автомобиль и так далее
Исключения: это событие, когда мы в программе получили данные, не учтенные алгоритмом, что приводит к невозможности дальнейшего его исполнения (по умолчанию это приводит к остановке работы всей системы или локализуется в рамках одного потока обработки вызова)
То есть — наш алгоритм получил такие данные, на которые он не был рассчитан. Поэтому выбрасывается ошибка, которую нужно обработать (например, получили ошибку в ответе от сервера, пользователь загрузил кривые данные, которые не были проверены, не ответил сервер, ответил ошибкой, не нашелся файл и так далее). Все одно — на вход пришли кривые данные, на которые программа не была расчитана
Но исключения происходят не только из-за внешних факторов. Никто не отменял кривые руки, когда программа ломается из-за кривого алгоритма, принимая «сломанное» состояние самостоятельно. Классика — когда напутали с типами (реальный кейс). Во всех случаях программа держала в переменной объект. Но при одном кейсе (когда ты заходил в редактирование) и успешно редактировал обьект, он клался в память как массив объектов. Ломая все поведение программы до перезагрузки страницы (дада, те самые type any).
Другими словами: любое исключение, есть недостаток нашей программы. И мы обязаны обрабатывать исключения: либо нормализуя данные для продолжения работы алгоритма, либо — отказываясь от исполнения, отбрасывать ошибку потребителю (под страхом смерти нельзя ломаться молча, оставляя потребителя в неведнии).
Плюс, обязательно, логировать событий в аналитические системы (журналирование, аудит, мониторинг, обзервабилити платформа). Эти события необходимо учесть, сделать доступными для анализа, подсчета и построения графиков. Для того, чтобы итеративно разбирая негативные кейсы увеличивать устойчивость и качество работы нашей программы Так вот, этого понимания повально не хватает разработчикам. Недавно я потратил неадекватно много времени и сил, чтобы донести эту мысль, и, кажется, об этом пора делать доклад
· 03.09.2025
Разговор скорее о системах и задачах, которые решают такие системы. Существуют детерминированные системы, которые в принципе не подразумевают исключения.
Наличие исключений, завершающих работу — допущение для удешевления функциональной модели продукта.
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён