![]() |
|
|
![]()
|
|
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Да ладно нападать на Архангельского. Не одна сотня программистов по его книгам начинала. Хотя конечно указанный прокол достаточно серьезный, но в общем понимании его книги очень и очень полезны.
|
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
Вот-вот. А я то думаю, и чего это 50% кандидатов при собеседовании чуть до мигрени меня не доводят, убеждая, что new просто объязан возвращать NULL. -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Vyacheslav, я не думаю, что это должен быть основной критерий отбора. Даже если кандидат в этом ошибается, это вовсе не значит, что он и в остальном полный 0.
Люди они разные, а программисты тем более |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
В большинстве случаев дело обстоит именно так. Это означает, что человек вообще не писал серьезных приложений, где обработка исключительных ситуаций, является одним из критических и важных для нормальной работы мест -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
К стыду своему признаюсь, что я почти нигде не перехватыфваю это исключение. Если не сработал new - происходит отработка на уровне Application - т.к. в 99% случаев это говорит о том, что дальше работать нельзя. За исключением соучаев, когда в какой-нибудь ветке требуются уж очень большие ресурсы, на которые реально может нехватить памяти. Если вылетает new с объектом размером 100 байт - значит где-то очень серьезная утечка. А заключать каждый new в блок try catch приведет уж к больно большому разрастанию кода. Правда я себя не считаю профессионалом - скорее плотный любитель. |
|||
|
||||
| Vyacheslav |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
Угу. Потому что за Вас это делает VCL
Заключать каждый new в блок try catсh - обратная сторона той же некомпетентности. См предыдущий мой пост. Ловить нужно по возможности( подчеркиваю - по возможности) как можно дальше от того места, где исключение произошло. Но ловить обязательно. Вам ведь не не нравится, когда Windows выходит на синий экран. Так и с программой. Сработала или не сработала правильно программа, но в 95 процентах пользователь должен решать, хочет или нет он прекратить с ней работу. А для этого нужно очень аккуратно работать с исключениями -------------------- С уважением, Вячеслав Ермолаев |
||||
|
|||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Согласен с этим на 100% Но после этого обсуждения я начинаю себя ощущать менее компетентным Хотя максимум усилий я прилагаю к повышению дуракоустойчивости программы, и уж конечно, указанный блок в функции Winmain у меня переделан и выдает сообщение по-русски. |
|||
|
||||
| Bima |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 15.8.2006 Репутация: 2 Всего: 2 |
Vyacheslav, я пытался разобрать ваш пример по "полочкам", не вышло. Скорее всего знаний не хватает, или данных.
Вы не могли бы сделать простой пример (там ловятся централизовано исключения), где скажем так, выделяется память, математические операции(сложение делние без проверки на 0) и что нибудь еще. По возможности с коментариями и выложить этот пример здесь, на всеобщее обучение. Чем проще пример будет, тем легче его будет понять. Я всегда ловил исключения только "местно", но это пошло еще с программ DOS-их. Сейчас хочу отойти от этой привычки (можно сказать, вы убедили меня в этом). P.S. кстати ВСВ тоже учил по Архангельскому, потому, что на тот момент, эта была единственная книжка, которую я нашел (инета небыло). -------------------- Чтобы дойти до цели, надо идти. Клавиатура и мышь - это главные инструменты прогресса. |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Выскажу еще свое мнение по поводу централизованного перехвата исключений.
В большинстве своем они нужны для отладки и для корректного сохранения данных. Ну ни как пользователю не поможет сообщение хоть по-русски хоть по-французски "Произошло деление на 0. Приложение будет закрыто". Перехватывать исключения нужно обязательно, но желательно в тех местах, откуда по возможности можно продолжить исполнение кода, пусть и с урезанным функционалом, типа "Извините, в программе произошла ошибка, данная функция недоступна, сообщите разработчику". Хотя VCL страдает избыточной любовью к исключениям, взять функции типа atoi - зачем генерить исключения в них лично мне не понятно, и там, естественно появляется обработчик с идиотской надписью"Вы ввели не число. Введите, пожалуйста число!" |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
Угу. Человек работал со складом. Не вышло. Он сообшил об ошибке администратору и чтобы продолжить работу с други модулем этой же программы, получает сообщение "Приложение будет закрыто" Еще раз. У Вас Windows наверняка иногда выдает ошибки. И что после этого оно перегружается? -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Именно про такие случаи я и писал. Максимально сохранить возможность продолжать работу. Что зачастую невозможно при очень далеких перехватах исключения. Чем дальше тем лучше, конечно, но и перегибать не надо. |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
Почему с идиотской? Вот давайте на примере и посмотрим как я это сообщение обработаю, невзирая где в программе он располжено и как Вы допустим будете обрабатывать ваш беспроблемный atoi Вот простейший пример.
Прошу обратить внимание на следующий факт. Там где ошибка связана с неправаильным вводом(Button2Click), будет выдано сообщение. Причем абсолютно неважно, где был выброшено исключение. В данном пример две строчки в Button2Click . А их может быть 100, но программа поведет себя одинаково. А вот в Button1Click предположим эта же ошибка конвертации тоже возможна, но связана она не с вводом, а ошибкой в коде. Что я , как программист предпринимаю? Зная, что все причины , вызывающие исключения в этом коде не могут быть исправлены действиями пользователя, я их перехватываю и дальше посылаю свое. Программа поведет себя по другому. Она выведет ошибку , причем с именем файла и строки, где произошло исключение и спросит нужно ли завершить программу. Здесь, конечно, все немного утрировано, но смысл , я надеюсь, понятен. Добавлено @ 17:52 Ошибаетесь. Как раз возможно В моем предыдущем примере поставте сколько угодно кнопок, в из обработчиках сгенерите исключения и давите как Вам вздумается. Уверяю Вас, программа завершится только с Вашего разрешения. Причем, что удивительно, я каждое исключение не обрабатываю -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Убедили.
Я же и говорю, что я скорее любитель, чем профессионал - программирование занимаюсь в свободное от основной работы время. Я делаю немного по-другому... Обычно перехватчик таких исключению у меня немного ниже - на уровне главной формы, но в общем наши действия схожи. Ваш метод мне нравится больше. Век живи - век учись. |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |