metaclass: (Default)
[personal profile] metaclass
Один жабист утверждает что исключения надо ловить и обрабатывать, а не дать им нахрен свалится в корень вызова и пусть тот, кто вызывает, разбирается. Ну в жабе по другому сложнее, это понятно.
Но я не люблю обрабатывать исключения самостоятельно, за исключением "вывел в лог с данными приведшими к исключению и кинул дальше".
Потому что в таком случае баги становятся расходящимися. Хороший баг - это когда ВСЕ СДОХЛО, КОРОВЫ, ЗАБОРНИКИ, СТЕКТРЕЙС, МЯСО КРОВЬ КИШКИ. Умирает от входа. Сразу видно, где что надо исправлять.
А плохой баг: это когда он был, но мы его не видели, иначе как чтением логов каждый день за чаем. А хуже того - если мы исключение от него перехватили и пошли работать дальше, а в состоянии программы уже поселилось маленькое скрытое червие которое потом дальше где-нибудь приведет к еще худшим, уже непонятным ошибкам. Впрочем, такое редко бывает, если корректно работать - транзакции там при ошибках откатывать, внешние ресурсы закрывать в finally и вообще возвращаться в корректное состояние.
Но лучше все-таки вернутся в корректное состояние в finally, отписаться в лог в catch и бросить исключение дальше - пусть главный цикл оконных сообщений или там веб-сервер разбирается, у него голова больше.

Date: 2012-02-15 10:03 am (UTC)
From: [identity profile] volodymir-k.livejournal.com
Во-первых, исключения это не что-то особенное явовское, идею поддерживали все языки 90-х типа Ada, CLU, eiffel и т.д.

Во-вторых, проблему определения точки обработки исключения никто окончательно не решил (на любом языке), это эвристическая инженерная задача, иногда очень сложная из-за дополнительных требований типа "спросить у юзера, если не против, то проигнорировать 1 ошибку в пакете и продолжить дальше." Мир вообще местами сложен. Если вам какой-то пионер советует всегда сразу ловить и сразу обрабатывать все исключения -- ну пометьте себе, что он иногда гонит туфту.

В-третьих, а какая альтернатива исключениям? errno?

Date: 2012-02-15 10:38 am (UTC)
From: [identity profile] n16bs.livejournal.com
Альтернатива из мира функциональщины - Either и паттернматчинг.

Date: 2012-02-15 11:46 am (UTC)
From: [identity profile] jdevelop.livejournal.com
вот я тут хочу дико ругаться сейчас, ибо таскать эту Control.Monad.Error или там Either и смотреть на сигнатуры функций и способы их обработки с лифтами мучительно больно

Date: 2012-02-15 10:41 am (UTC)
From: [identity profile] metaclass.livejournal.com
Альтернативы исключениям и нету особой.
Я обычно делаю так: для заведомых ошибок - исключения. Пусть валится.
Для исключений "не у меня" - перехват и далее - или выброс дальше, или же обработка и код возврата.
Для операций, которые по определению могут быть ошибочными (пользователь ввел не тот пароль) - код возврата.

Коды возврата офомлены методом "имитируем хаскель на java/c#" - базовый класс-генерик с двумя наследниками - один сигнализирует об ошибке и тащит с собой информацию о ней, второй об удаче и тащит с собой результат. В параметрах класса-генерика - тип для удачного результата, и тип для неудачного результата.

Date: 2012-02-15 11:29 am (UTC)
From: [identity profile] n16bs.livejournal.com
А что тягаете в качестве объекта для неудачного результата? Те же эксепшены, что-то своё или каждый раз разное?

Date: 2012-02-15 11:46 am (UTC)
From: [identity profile] metaclass.livejournal.com
Как паук из розетки в голову надиктует :)
Иногда исключение, иногда сообщение для пользователя читабельное, все равно на уровне GUI никто не знает что с этой ошибкой делать, кроме "показать сообщение пользователю и повторить попытку".

Date: 2012-02-15 11:47 am (UTC)
From: [identity profile] jdevelop.livejournal.com
Ад, черви! не пишите на хаскеле в жабе, я вам прошу

Date: 2012-02-15 11:58 am (UTC)
From: [identity profile] metaclass.livejournal.com
"А будешь плохо себя вести - в аду будешь код функциональщиков на жабе переписывать".

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 8th, 2026 09:43 pm
Powered by Dreamwidth Studios