Amazon EC2
А вот в «Elastic Compute Cloud» я разочаровался =(
вся неправда о Хитрожёлтом индейце
Archive for Февраль 2008
А вот в «Elastic Compute Cloud» я разочаровался =(
Исключения во всех, виденных мной, учебниках иллюстрируют с помощью ошибок.
Удобно-де деление на ноль и прочую муть ловить и всё такое.
Мне же кажется, что это сильно искажает само понятие «исключительной ситуации» для того, кто не совсем владеет этим аппаратом.
Мне, к примеру, нужно было ознакомиться с Коберновским представлением прецедентов (use-cases), чтобы понять, что же исключения представляют собой на самом деле.
Разумеется, я не знал, что чтение Коберна к этому приведёт, но речь не о том.
Дело в том, что исключения на самом деле являются мощнейшим средством структурирования программного кода, позволяющим чисто синтаксически сильно его упростить. Для меня это выливается в более стройную логику и меньшее количество головной боли при отладке.
Ведь если разобраться, то всё просто.
Есть некий идеальный поток кода, который что-то там себе делает с нашими данными. Такое течение часто сравнивают с поведением сферического коня в вакууме. Тем не менее, это ведь и есть тот самый требуемый результат программистского труда, который ждут от нас пользователи.
Так вот. Этот идеальный поток информации частенько бывает не так уж и идеален. То, понимаешь, канал связи упал, то молдинги не те, то рессоры не завезли.
В большинстве случаев, нарушения в этом потоке не являются фатальными по крайней мере для самого кода. То есть, если вы видите, что программа вылетает только потому, что её дали на вход вместо точки запятую, то можете смело отправлять программиста доделывать, а ещё лучше — переделывать свой код. Просто потому, что он точно поленился использовать исключения и обработать проблему в каком-то «человеческом» виде.
Такие исключительные ситуации в потоке, понятное дело, сильно сказываются на бизнес-процессе и часто приводят к прерыванию текущей транзакции. Однако, я утверждаю, что код просто обязан обрабатывать такие ситуации корректно.
Казалось бы, можно всякий раз проверять статусы всего и быть в гармонии с миром. Но это не продуктивно. К тому же, регулярный копи-паст проверочного кода нарушает очень правильный принцип «DRY» (не повторяй себя) и вообще ведёт к загаживанию кода.
И вот как раз для этого и существуют программистские исключительные ситуации (их-то и называют для краткости «исключениями»).
Суть заключается в том, что вы, выделив некие ситуации, которые являются, как бы, ответвлениями в алгоритме работы и в нормальной ситуации не достигаются, оформляете их как блоки обработки исключений.
После этого в основном блоке кода вы просто описываете свой регулярный процесс и всё.
Если в каком-либо месте этого процесса будет «выброшено» сообщение об исключении, то сработает нужный блок кода.
Просто, изящно и эффективно.
А вы как считаете?
PS: Давно хотел об этом рассказать, но как-то всё забывал это сделать. А сейчас написал красивый код, используя исключения и понял, что надо всё-же зафиксировать свои мысли по этому поводу.