![]() |
Модераторы: LSD |
![]() ![]() ![]() |
|
Lazin |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 4 Всего: 154 |
понимаешь, в чем фишка, любой императивный код, по сути, это последовательность связанных друг с другом операций, последующие операции как правило зависят от успешности выполнения предыдущих, то есть мы опять пришли к тому, что разработчик в праве проигнорировать код ошибки после чего причину последующих ошибок будет сложно установить но я уже начал повторяться, мы идем по кругу ![]()
и еще один и еще, тебе говорит о чем-нибудь словосочетание "комбинаторный взрыв"? ![]() если смотреть только на один уровень, скажем, на класс IO, то все почти OK, немного грязновато и все, но если у нас есть подсистема, в которой все это используется совместно, и нам нужно возвращать из нее коды ошибок, то вещи очень быстро перестают быть управляемыми поясню на примере, представь, что у тебя есть ф-я main, это самый высокий уровень, из нее вызываются всякие ф-ии, методы классов, это более низкий уровень, каждый метов/ф-я этого уровня используют разные подсистемы, которые составляют системный уровень приложения - ввод/вывод, и так далее так вот, все ошибки, которые не могут быть обработаны и должны привести к завершению приложения должны попасть в main, так? происходит какая-то ошибка на уровне системы, она не может быть обработана на том-же уровне, естественно, файл или сокет не в курсе, нужно-ли завершать приложение или нет, поэтому происходит раскрутка стека, ошибка идет на "средний" уровень, оказывается что она там то-же не может быть обработана, после чего она передается на самый высокий уровень и там происходит запись сообщения в лог и завершение работы. Так вот, представь, о каком количестве кодов ошибок должен знать самый верхний уровень, в случае исключений, все просто, пишешь:
в общем, исключения улучшают модульность, клиентскому коду не нужно знать обо всем, что может произойти с объектом класса, исключения - полиморфны, поэтому зачастую можно просто игнорировать их тип, в большинстве случаев, для того, что-бы приложение корректно обработало ошибку, достаточно самого факта того, что исключение произошло. С кодами ошибок придется м****я тем больше, чем больше проект. Ну еще стоит вспомнить win32 api, а точнее то, сколько ошибок возникает из-за неправильной проверки результатов выполнения той или иной ф-ии. К примеру, CreateFile может вернуть NULL или INVALID_HANDLE_VALUE, в разных случаях, при этом еще нужно получить код ошибки ф-ей GetLastError. |
||||
|
|||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 1 Всего: 39 |
>и еще один и еще
Ну так новый тип исключения тоже нужно будет создавать. >Так вот, представь, о каком количестве кодов ошибок должен знать самый верхний уровень, в случае исключений, все просто, пишешь На словах то оно все так и обстоит. Но на деле мои программы вообще никогда не обрабатывают ошибки в main или просто через большое количество вызовов. В общем то вопрос у нас уперся в принципиально разные подходы к проектированию ПО. ИМХО продолжать полемику (в ключе эксепшин VS код возврата) дальше нет смысла. Как обычно в холиворах стороны высказали все свои доводы, но каждый остался при своем. >Ну еще стоит вспомнить win32 api Вот это точно вспоминать не стоит. Я уже давно забыл и не жалею. -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
Lazin |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 4 Всего: 154 |
даже если так, исключения полиморфны, а коды ошибок нет(если речь идет не о чем-нибудь вроде boost::system)
видимо, наши программы решают сильно разные по сложности задачи ![]() ОК, мне уже надоело раз за разом повторять прописные истины ![]() |
||||
|
|||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 1 Всего: 39 |
>видимо, наши программы решают сильно разные по сложности задачи
Ох, сколько высокомерия, мой уважаемый, опытный и толстый собеседник ![]() -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: нет Всего: 196 |
djamshud, просто вызывают сомнения твои высказывания по поводу работы с большими проектами, так как у тебя глаза разбегаются от форматирования. А без него совершенно невозможно анализировать код, имеющий более одного уровня вложенности блоков - осознание необходимости форматирования приходит новичкам не позже, чем через пару месяцев, после начала практического освоения языка.
|
|||
|
||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 1 Всего: 39 |
>без него совершенно невозможно анализировать код
Вы меня извините, но вы говорите совершеннейшую чушь. То, что нормально для одного, совершенно неприемлемо для другого, я это прекрасно понимаю, но почему вы выдвигаете свою (на самом деле большинства, конечно) точку зрения единственно верной? >вызывают сомнения твои высказывания по поводу работы с большими проектами А я разве где-то так высказывался? О своих личных и рабочих проектах я скромно умолчал, если я не ошибаюсь. -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
maxxant |
|
|||
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 8.9.2009 Репутация: нет Всего: 1 |
||||
|
||||
lom2k |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 6.3.2010 Репутация: нет Всего: нет |
Ну и нафлудили
![]() Использовать или не использовать ++ exceptions дело сугубо личное. Я например не использую, хотя пишу на плюсах. Причины: 1. раскрутка стека при исключениях операция недешевая в сравнении с обычным кодом возврата 2. по мне лучше использовать функцию инициализации объекта с кодом возврата, чем исключение в конструкторе 3. понимание кода if {} else {} проще чем многоуровневые try {} except {} finally {} 4. переносимость Хотя SEH и сигналы пользую в полной мере, ибо как бы не была оттестирована система (кивок в сторону диспетчерских центров), тупо что-то где то не заметили и программа валится, а системные исключения все же помогают иногда спасти человеческую жизнь |
|||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 5 Всего: 92 |
Lazin, раз тема ещё (оказывается!) жива и я её увидел - ты этого добился.. Холиварам место в холиварах (хотя такое уже и было..). |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 4 Всего: 154 |
я уже один раз нафлудил, а вы хотите, что-бы я еще раз нафлудил? еще чего! пойду, открою бутылку шампанского ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила ведения Религиозных войн | |
|
1. Уважайте собеседника 2. Собеседник != враг 3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez" С уважением, Smartov. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Религиозные войны | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |