-
> oxffff (17.01.2009 17:16:53) [113]
А та продолжай, доводы пока не убедительны.
-
> vuk (17.01.2009 17:37:58) [118]
Да многие известные авторы грешат этим, пишут очень грязный код.
-
oxffff © (17.01.09 17:17) [114] Есть множество чужих интерфейсов которые что то делают, и алгоритм с пунктами а б в г д е ж з. Теперь предположим они идут подряд. Любые ошибки гасятся, выполнение не останавливается.
а б тут не отработало в г д тут не отработало е тут не отработало ж з
То есть прога не жизне способная получается? Она работает исключительно в идеальных условиях, пока за компьютером сидит программист который это написал. Теперь допустим что прога не блокнот или еще какая нибудь иутилитка на пять минут, от работы которой зависит зп пользователя и работа, программист заранее вводит эффект непредсказуемости? А зачем?
-
> Anatoly Podgoretsky © (17.01.09 18:44) [120] > > oxffff (17.01.2009 17:16:53) [113] > > А та продолжай, доводы пока не убедительны.
Ваши впрочем совершенно не убедительны. :)
-
Удалено модератором
-
test (17.01.09 18:57) [122] То есть прога не жизне способная получается?
Я боюсь, пока одна сторона будет подразумевать скрытие принципиальных ошибок, а другая - непринципиальных, договориться им будет трудновато.
-
Virgo_Style © (17.01.09 19:29) [125] Если одна из сторон вообще не знает что это за ошибка откуда уверенность что эта ошибка - непринципиальна?
-
Совсем свежий пример: вчера пытался залогиниться на сайте demonoid.com (из ветки про много музыки). Ввожу имя и пароль, говорю submit и ничего не происходит (страница обновляется и на ней то же самое предложение залогиниться).
После того, как я вспомнил, что когда-то запретил cookies для этого сайта и убрал этот запрет, логин прошел как по маслу. На других сайтах при аналогичной ситуации появляется сообщение You must enable cookies.
К вопросу о тихом прятании ошибок.
-
> test (17.01.09 18:57) [122] > oxffff © (17.01.09 17:17) [114] > Есть множество чужих интерфейсов которые что то делают, > и алгоритм с пунктами а б в г д е ж з. Теперь предположим > они идут подряд. Любые ошибки гасятся, выполнение не останавливается. > > > а > б тут не отработало > в > г > д тут не отработало > е тут не отработало > ж > з > > То есть прога не жизне способная получается? Она работает > исключительно в идеальных условиях, пока за компьютером > сидит программист который это написал. Теперь допустим что > прога не блокнот или еще какая нибудь иутилитка на пять > минут, от работы которой зависит зп пользователя и работа, > программист заранее вводит эффект непредсказуемости? А > зачем?
Ты же опять перегибаешь палку. :)
Кто тебе сказал, что в этом случае нужно их гасить. Если составная операция состоит из части некритических подопераций, когда их ты обернешь в пустой блок, если у тебя нет никакой информации о том, что они могут генерировать. Все остальные операциии связаные между собой ты естественно сделаешь без гашения исключений. Ты понимаешь разницу между моим примером и своим. Мой
Есть некоторый контракт задания, есть некоторый контракт логера(а логер - это может быть txt, web, СУБД, mobile phone SMS ....). Есть процедура, которая должна вызвать задание и залогировать начало, окончание, провал задания. Процедура см выше.
Есть процедура, которая извлекает из очереди задания в отдельном потоке и вызывает вышеумомянутую процедуру и после делает некоторые действия.
TO ALL
Мой вопрос зачем мне пускать неизвестное исключение наружу в другую зону ответственности исключений? Где я не прав? Покажи мне как было реализовать эту часть правильно естественно вашего IMHO. А я вам покажу где косяки в вашем коде. Пойдет так?
-
> Игорь Шевченко © (17.01.09 19:46) [127]
Я не вижу вашего ответа, на вопрос, что должна делать среда, если плагин вызвал исключение, тихо умереть с треском по вашему?
-
Что то в последнее время на делфимастере в самые живые обсуждения по каким то ничтожным поводам. Раздули из мухи слона.
-
> Игорь Шевченко © (17.01.09 19:46) [127] > Совсем свежий пример: вчера пытался залогиниться на сайте > demonoid.com (из ветки про много музыки). Ввожу имя и пароль, > говорю submit и ничего не происходит (страница обновляется > и на ней то же самое предложение залогиниться). > > После того, как я вспомнил, что когда-то запретил cookies > для этого сайта и убрал этот запрет, логин прошел как по > маслу. На других сайтах при аналогичной ситуации появляется > сообщение You must enable cookies. > > К вопросу о тихом прятании ошибок.
Cовершенно не коррелирует с моим примером. Мой пример упрощенно
No GUI application
var Tasks:array[1..10] of ITask; ExternalLoger:Ilog; task:ITask; begin
............
Вы предлагаете следующий вариант
for task in Tasks do begin try task.execute; except ExternalLoger.Inform('Task Error'); end; end;
Я утверждаю что должно быть так.
for task in Tasks do begin try try task.execute; except ExternalLoger.Inform('Task Error'); end; except end; end;
-
Удалено модератором
-
Игорь Шевченко © (17.01.09 19:46) [127] Но роботает жы )))
oxffff © (17.01.09 19:56) [128] Да ты хоть как назови хоть контрактом хоть асбстрактом, если ты не отвечаеш за выполнение алгоритма и обработку ошибок, все твои контракты работают исключительно в идеальных условиях. Если пишеш для мамы на 8 марта красивую открытку так и пиши, если от этой программы хоть что то зависит переписывай не подставляй пользователя понопрасну.
зы Тебе было бы легче если бы я в твоем стиле алгоритм псевдо кодом оформил?
-
> test (17.01.09 20:14) [133]
Я извиняюсь, но пишите мягкий знак после Ш в глаголах.
-
> test (17.01.09 20:14) [133] >Если пишеш для мамы на 8 марта красивую открытку > так и пиши, если от этой программы хоть что то зависит переписывай > не подставляй пользователя понопрасну.
Слушай давай без упонимания о родителях. А то меня это очень злит.
-
DVM © (17.01.09 20:19) [134] привычка. Постараюсь.
oxffff © (17.01.09 20:20) [135] Хорошо перефразируем "чтобы одноклассникам показать красивую тулзу, то так и пиши", что злит то?
-
> test (17.01.09 20:14) [133] > oxffff © (17.01.09 19:56) [128] > Да ты хоть как назови хоть контрактом хоть асбстрактом, > если ты не отвечаеш за выполнение алгоритма и обработку > ошибок, все твои контракты работают исключительно в идеальных > условиях. Если пишеш для мамы на 8 марта красивую открытку > так и пиши, если от этой программы хоть что то зависит переписывай > не подставляй пользователя понопрасну.
Слушай ты какой то непонятливый.
Давай на пальцах.
Существуют некий общий алгоритм(может воспринимать его как generic метод), так вот конктретно указание конкретных типов, это и есть инстанцирование обобщеного метода. Его суть 10 независимых друг от друга заданий, которые нужно выполнить +обобщенный контракт логгера. По условию задачи сказано, что реализация не известна. Не известны также исключения которые они возвращают, более того реализация этих COM интерфейсов может быть написана на произвольном языке.
Мой код упрощенный снова.
for task in Tasks do begin try try task.execute; except ExternalLoger.Inform('Task Error'); end; except end; end;
Если я не поставлю это, прощай выполнение остальных заданий, поскольку логер может дать исключение(например нет подключения), о котором ты понятия не имеешь.
Перед тем, как что-то мне писать перечитай еще раз внимательно.
-
> test (17.01.09 20:22) [136] > DVM © (17.01.09 20:19) [134] > привычка. Постараюсь. > > oxffff © (17.01.09 20:20) [135] > Хорошо перефразируем "чтобы одноклассникам показать красивую > тулзу, то так и пиши", что злит то?
Я понимаю твой намек на школу, однако боюсь как бы тебе самому не пришлось заново закончить. см. [137].
-
oxffff © (17.01.09 19:57) [129]
> Я не вижу вашего ответа, на вопрос, что должна делать среда, > если плагин вызвал исключение, тихо умереть с треском по > вашему?
Ты что, скрипач, дальтоник ? Зеленого от оранжевого отличить не можешь ?
Среда должна отреагировать на ошибку, а уж умирать ей или нет, это зависит от многих факторов.
Среда Delphi, например, при ошибке в установленном компоненте может повести себя по-разному, как то:
Тихо умереть без звука.
Очутиться в состоянии ступора, когда при нажатии на кнопку ОК в окне сообщения об ошибке возникает точно такое же сообщение (а то и два).
Выдать сообщение об ошибке и после нажатия на ОК в окне этого сообщения продолжать работать до следующего использования этого компонента.
|