самосовершенствование
Ну я с ним в этом солидарен :-D
Почему?
Если кратко, то они нарушают стройность программы. Стройность - понятие субъективное, поэтому я и говорю: "не люблю их", а не "категорически не рекомендую использовать".
Исключения запутывают программу. Это такой скрытый goto. Куда перепрыгнет исполнение порой очень сложно отследить, поэтому я пытаюсь те места, где есть могут возникнуть исключения, обернуть в такую... исключение-непробиваемую оболочку.
Исключения нередко приводят к утечкам памяти, появлению невалидных указателей и т.п.
Механизмы исключений весьма различны, но обычно весьма медлительны и расточительны (фрагментация). Они сложно переносимы с одной платформы на другую при необходимости низкоуровневой оптимизации.
А вот, что пишет Джоел:
http://www.joelonsoftware.com/items/2003/10/13.html
С этим согласен, тоже не слишком приветсвую их.
А вот если подумать, существует ли принципиально иной способ перехода для сообщения об "исключительной" ситуации - т.е. состояния программы, в которое не должна приходить система во время функционирования?
Код ошибки использовать неудобно: замучаешься проверять каждый вызов.
Исключение - нечто скользкое и goto-подобное.
Есть ли третий вариант?
З.Ы. Я понимаю, что если избавиться от "состояний" и перейти к функциональным языкам ни исключения ни коды ошибок практически не понадобятся.
Исключение - нечто скользкое и goto-подобное.
Есть ли третий вариант?
З.Ы. Я понимаю, что если избавиться от "состояний" и перейти к функциональным языкам ни исключения ни коды ошибок практически не понадобятся.
Вовсе нет.
Вообще альтенативных способов обработок "внеплановых аварий" не мало. Например в Erlange.
[QUOTE=wikipedia]
Второй момент выражается в формуле «let it crash» («пусть процесс упадет»). Вместо перехвата ошибок и попытки продолжения работы часть программы, содержащая рискованный код, выделяется в отдельный процесс-камикадзе, этот процесс делает всё возможное, чтобы система убила его в случае возникновения ошибки[/QUOTE]
Я правда знаком с ним только по хеллоу-ворлд =).
В Eiffel`е есть пред и пост условия выгодно дополняющее исключения.
Вот тут я откровенно говоря сильно сомневаюсь. Сейчас многие из них перенесли на управляемые платформы, например - Haskell, Python и другие есть под JVM.
Я не занимался этим вопросом глубоко, функциональным программированием, и тем более их особенностями работы в таком окружении. Но если они работают под JVM - мне не совсем ясно, как они могут избегать использования исключений.
А вот это интересная вещь. Частично можно их эмулировать проверками инвариантов, как в NUnit (классы Assert, Debug), но мне кажется, это может помогать только в тривиальных случаях.
[quote=Zorkus]Я не занимался этим вопросом глубоко, функциональным программированием, и тем более их особенностями работы в таком окружении. Но если они работают под JVM - мне не совсем ясно, как они могут избегать использования исключений.[/quote]Я знаком с F# (OCaml на .NET) - синтаксис, принципы, но покачто ничего полезного разрабатывать не пришлось, но скоро видимо придется.
Так вот мне кажется, что собственные исключения вряд ли понадобятся, и нужно будет отлавливать только исключения среды исполнения, правда, при условии, что у нас достаточно "чистый" стиль разработки.