Re[5]: Когда стоит и не стоит использовать исключения?
От: Trean Беларусь http://axamit.com/
Дата: 24.01.06 21:55
Оценка: 12 (2)
Здравствуйте, MatFiz, Вы писали:

MF>Здравствуйте, Trean, Вы писали:


MF>Не забывай еще, что в программе могут быть ошибки. Ошибки разработчика.

MF>С ними-то тоже надо что-то делать (в перспективе исправлять, конечно).
MF>Хорошо, если прога может продолжить корректно работать, даже несмотря на ошибки прогаммиста, а этого как раз можно добиться, изолируя ошибки на некотором уровне, а не падая с воплями, что что-то не правильно.

сомнительна корректность такой работы: когда валятся ошибки программа работает некорректно, как бы глубоко вы их не пытались запрятать. Это очень похоже на прятание головы в песок. Представляете вы запускаете какую-то программу, пытаетесь что-то сделать, а она ничего не делает и не говорит почему. А все потому, что к примеру, разработчик обрабатывает эксепшены следующим образом:

catch(...) {
// do nothing
}


Хорошо, если что-то в лог пишется, и то поди догадайся, что в лог что-то записалось. Программа, то не говорит что ошибка произошла.
Бывает попадаются такие программы, кроме как удалить их другого желания не возникает.
Re: Когда стоит и не стоит использовать исключения?
От: FreshMeat Россия http://www.rsdn.org
Дата: 07.03.06 08:47
Оценка: 2 (1)
Здравствуйте, falls_rain, Вы писали:

_>Поясните пжста (желательно на примере) в каких случаях нужна обработка исключений..а где нет (достаточно условного блока)..


Имхо, одна из лучших дискуссий на тему Exceptions vs. status returns
Хорошо там, где мы есть! :)
Re[2]: Когда стоит и не стоит использовать исключения?
От: Spaider Верблюд  
Дата: 24.01.06 10:41
Оценка: +1
Здравствуйте, Trean, Вы писали:

T>и я вообщем-то с этим согласен: исключение — это исключительная ситуация в приложении в большинстве случаев свидетельствующая о неправильной логике работы приложения.


А я вот не согласен с твоим утверждением. Возбуждение исключения должно свидетельствовать как раз об обратном -- о том, что произошла ситуация, предполагаемая логикой программы, но от оной не зависящая. То бишь, если у тебя в процессе передачи данных по сети пропала связь, это ведь ни в коем случае не баг в твоей программе. Однако предусмотреть такую ситуацию необходимо.
... << RSDN@Home 1.2.0 alpha rev. 619>>
--
К вашим услугам,
Когда стоит и не стоит использовать исключения?
От: falls_rain  
Дата: 22.01.06 13:21
Оценка:
Всем привет!
Я тут новенький...по сему не надо сильно кидать камни в меня
Вопрос таков:
вот прочитал про механизм исключений в С#...и создаётся впечатление, что обработку этих самых исключений надо делать везде..ну или почти везде..
Поясните пжста (желательно на примере) в каких случаях нужна обработка исключений..а где нет (достаточно условного блока)..
С уважением.
Re: Когда стоит и не стоит использовать исключения?
От: Trean Беларусь http://axamit.com/
Дата: 22.01.06 14:29
Оценка:
Здравствуйте, falls_rain, Вы писали:

_>Всем привет!

_>Я тут новенький...по сему не надо сильно кидать камни в меня
_>Вопрос таков:
_>вот прочитал про механизм исключений в С#...и создаётся впечатление, что обработку этих самых исключений надо делать везде..ну или почти везде..
_>Поясните пжста (желательно на примере) в каких случаях нужна обработка исключений..а где нет (достаточно условного блока)..
_>С уважением.

Обрабатывать исключения надо там, где есть возможность сделать что-то полезное с ними. В большинстве случаев вся обрабтка checked исключений сводится к бросанию их на верхний уровень или выводу в лог, так что вообщем-то можно обойтись и unchecked. Иногда возникает необходимость освободить ресурс в случае исключения, например освободить соединение с базой. Не знаю как c С#, но некоторые java бибиотеки (Hibernate) избавляются от checked исключений, и я вообщем-то с этим согласен: исключение — это исключительная ситуация в приложении в большинстве случаев свидетельствующая о неправильной логике работы приложения.
Re: Когда стоит и не стоит использовать исключения?
От: Слава Шевцов Россия http://www.rentaguru.ru/
Дата: 22.01.06 15:44
Оценка:
Здравствуйте, falls_rain, Вы писали:

_>вот прочитал про механизм исключений в С#...и создаётся впечатление, что обработку этих самых исключений надо делать везде..ну или почти везде..

_>Поясните пжста (желательно на примере) в каких случаях нужна обработка исключений..а где нет (достаточно условного блока)..

Если важна скорость, то лучше делать условный блок. Исключение обрабатывается примерно в 1000 раз медленнее, чем оператор if.
----------------------------------------------------------------------------------------------
Rentaguru
Re[2]: Когда стоит и не стоит использовать исключения?
От: falls_rain  
Дата: 23.01.06 14:41
Оценка:
Trean, Слава Шевцов
Спасибо, что поснили
Re[3]: Когда стоит и не стоит использовать исключения?
От: Trean Беларусь http://axamit.com/
Дата: 24.01.06 16:00
Оценка:
Здравствуйте, Spaider, Вы писали:

S>Здравствуйте, Trean, Вы писали:


T>>и я вообщем-то с этим согласен: исключение — это исключительная ситуация в приложении в большинстве случаев свидетельствующая о неправильной логике работы приложения.


S>А я вот не согласен с твоим утверждением. Возбуждение исключения должно свидетельствовать как раз об обратном -- о том, что произошла ситуация, предполагаемая логикой программы, но от оной не зависящая. То бишь, если у тебя в процессе передачи данных по сети пропала связь, это ведь ни в коем случае не баг в твоей программе. Однако предусмотреть такую ситуацию необходимо.


Вы либо прочитали невнимательно, либо не совсем меня поняли. Потому что я с вами тоже согласен :) Я имел ввиду кидание исключений во внутренней логике не всегда правильно. При разрыве соединения, например, с базой, вы можете попытаться например его восстановить, или корректно освободить ресурс, попутно записав ошибку в лог. При разрыве связи по сети вы можете попробовать передать данные еще раз, или инициировать новое соединение на другой порт или еще что-то "полезное". А если у вас в коде выбросилось исключение вроде "деления на ноль", то что вы будете с ним делать? В ряде случаев у вас нет способов догадаться, что надо сделать, чтобы исправить ситуацию, какое значение у того или иного параметра переданного пользователем должно быть. Прог телепатов я еще не встречал :-) "Решение" в виде подстановки значения по умолчанию, это лишь попытка скрыть проблему в логике или исходных данных. Повторюсь, если вы ничего не можете обработать исключение, и лишь модете кинуть его на более высокий уровень или записать в лог, не используйте checked исключений. И не я один так думаю, я убедился в этом на своем опыте, checked исключения полезны в ограниченном количестве случаев.
Re[4]: Когда стоит и не стоит использовать исключения?
От: MatFiz Россия  
Дата: 24.01.06 20:36
Оценка:
Здравствуйте, Trean, Вы писали:

T>Вы либо прочитали невнимательно, либо не совсем меня поняли. Потому что я с вами тоже согласен Я имел ввиду кидание исключений во внутренней логике не всегда правильно. При разрыве соединения, например, с базой, вы можете попытаться например его восстановить, или корректно освободить ресурс, попутно записав ошибку в лог. При разрыве связи по сети вы можете попробовать передать данные еще раз, или инициировать новое соединение на другой порт или еще что-то "полезное". А если у вас в коде выбросилось исключение вроде "деления на ноль", то что вы будете с ним делать? В ряде случаев у вас нет способов догадаться, что надо сделать, чтобы исправить ситуацию, какое значение у того или иного параметра переданного пользователем должно быть. Прог телепатов я еще не встречал "Решение" в виде подстановки значения по умолчанию, это лишь попытка скрыть проблему в логике или исходных данных. Повторюсь, если вы ничего не можете обработать исключение, и лишь модете кинуть его на более высокий уровень или записать в лог, не используйте checked исключений. И не я один так думаю, я убедился в этом на своем опыте, checked исключения полезны в ограниченном количестве случаев.



Не забывай еще, что в программе могут быть ошибки. Ошибки разработчика.
С ними-то тоже надо что-то делать (в перспективе исправлять, конечно).
Хорошо, если прога может продолжить корректно работать, даже несмотря на ошибки прогаммиста, а этого как раз можно добиться, изолируя ошибки на некотором уровне, а не падая с воплями, что что-то не правильно.
How are YOU doin'?
Re: Когда стоит и не стоит использовать исключения?
От: OnThink Россия http://vassilsanych.livejournal.com
Дата: 25.01.06 08:03
Оценка:
_>Поясните пжста (желательно на примере) в каких случаях нужна обработка исключений..а где нет (достаточно условного блока)..

этот флейм уже есть: Что вы предлагаете на замену эксепшенов?
Автор: Сергей Губанов
Дата: 19.11.05
... << RSDN@Home 1.2.0 alpha rev. 634>>
Re[2]: Когда стоит и не стоит использовать исключения?
От: adontz Грузия http://adontz.wordpress.com/
Дата: 04.03.06 23:23
Оценка:
Здравствуйте, Слава Шевцов, Вы писали:

СШ>Если важна скорость, то лучше делать условный блок. Исключение обрабатывается примерно в 1000 раз медленнее, чем оператор if.


Кому лучше? Это сработавшее исключение влияет на скорость, а catch сам по себе (без выполнившегося throw) ни на что не влияет.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[2]: Когда стоит и не стоит использовать исключения?
От: Андрей Коростелев Голландия http://www.korostelev.net/
Дата: 05.03.06 10:45
Оценка:
Здравствуйте, Слава Шевцов, Вы писали:

СШ>Здравствуйте, falls_rain, Вы писали:


_>>вот прочитал про механизм исключений в С#...и создаётся впечатление, что обработку этих самых исключений надо делать везде..ну или почти везде..

_>>Поясните пжста (желательно на примере) в каких случаях нужна обработка исключений..а где нет (достаточно условного блока)..

СШ>Исключение обрабатывается примерно в 1000 раз медленнее, чем оператор if.


Это так, однако на то оно и исключение, чтобы кидаться именно в исключительных ситуациях.
Если это так, то наличие исключений не должно заметно влиять на производительность приложения.

Кроме того, в компиляторе поддержка исключений включена всегда, в противном случае мы не сможем получить предусмотренное стандартом поведение и уведомление об ошибках некотроых функций стандартной библиотеки (например, оператор new).
Об этом пишут Sutter и Alexandrescu в "C++ Coding Standards". Более того, они ратуют за использование исключения вместо кодов возрата потому как:

— Исключения невозможно проигнорировать
— Исключения распространяются автоматически, пока не будут перехвачены
— Исключения выносят обработку ошибок и восстановления после них из основного потока управления
— Исключения оказываются наилучшим способом уведомления об ошибках в конструкторах и операторах
-- Андрей
Re[3]: Когда стоит и не стоит использовать исключения?
От: dshe  
Дата: 06.03.06 16:59
Оценка:
Здравствуйте, Андрей Коростелев, Вы писали:

АК>Здравствуйте, Слава Шевцов, Вы писали:


СШ>>Здравствуйте, falls_rain, Вы писали:


_>>>вот прочитал про механизм исключений в С#...и создаётся впечатление, что обработку этих самых исключений надо делать везде..ну или почти везде..

_>>>Поясните пжста (желательно на примере) в каких случаях нужна обработка исключений..а где нет (достаточно условного блока)..

АК>Кроме того, в компиляторе поддержка исключений включена всегда, в противном случае мы не сможем получить предусмотренное стандартом поведение и уведомление об ошибках некотроых функций стандартной библиотеки (например, оператор new).

АК>Об этом пишут Sutter и Alexandrescu в "C++ Coding Standards".

Мне кажется, что рекомендации Sutter'а и Alexandrescu врядли стоит давать человеку, собирающемуся писать на C#. Несмотря на то, что, может быть, в данном случае они и правильны.
--
Дмитро
Re[2]: Когда стоит и не стоит использовать исключения?
От: LuciferMoscow Россия  
Дата: 06.03.06 17:05
Оценка:
Здравствуйте, Trean, Вы писали:
<skipped>
T>Иногда возникает необходимость освободить ресурс в случае исключения, например освободить соединение с базой.
Обычно это делается через "захват ресурса — есть инициализация объекта". И данный код сам освобождает данный ресурс
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.