Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.18;
Скачать: CL | DM;

Вниз

Опять спор об исключениях.   Найти похожие ветки 

 
Alexander Panov ©   (2005-08-21 19:35) [0]

Исходная ветка:
http://delphimaster.net/view/2-1124631176/

Обосновано ли использование конструкции try..except..end в таком случае:

try
  FileStream.Size := FileStream.Size-20
except
  ShowMessage();
end;


вместо

if FileStream.Size>19 then FileStream.Size := FileStream.Size-20;


 
Alexander Panov ©   (2005-08-21 19:46) [1]

Хотя в данном случае у меня возникли сомнения.

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


 
alpet ©   (2005-08-21 19:51) [2]

Дык, засечь время можно?. Если property TStream.Size получается через GetFileSize(Ex), думаю на производительность его лишнее чтение, особого влияния не окажет.


 
TUser ©   (2005-08-21 20:06) [3]

Я имел ввиду, что могут возникнуть исключения помимо присвоения отрицательной длины файла. Например, файл открыт только для чтения.

Собственно говоря, год назад я бы написал if. Но этот форум (в частности посты мастеров) меня привел к мысли, что лучше использовать в подобных случаях try...except, обрабатывая все возможные исключения, а не предотвращая только те, про которые автор подумал при написании кода. Все есть имхо.


 
begin...end ©   (2005-08-21 20:06) [4]

> Alexander Panov ©   (21.08.05 19:35)

> Обосновано ли использование конструкции try..except..end в таком случае...

Если этот код находится в подпрограмме, и из неё позволительно просто вылететь при возникновении этого исключения (т.е. не нужно ни продолжать код после try..ecept..end, ни производить какие-либо действия при его возникновении в коде подпрограммы), то, разумеется, использование try..except..end в таком случае необосновано.

> alpet ©   (21.08.05 19:51) [2]

> Если property TStream.Size получается через GetFileSize(Ex)...

Оно получается через SetFilePointer.


 
begin...end ©   (2005-08-21 20:19) [5]

Я бы скорее использовал try..finally -- например, для того, чтобы гарантированно освободить экземпляр TFileStream. В любом случае, я ЗА учёт возможности исключения в этом коде. И если исключение нужно обработать -- значит, нужен и обработчик.


 
Eraser ©   (2005-08-21 20:47) [6]

TUser ©   (21.08.05 20:06) [3]
Я имел ввиду, что могут возникнуть исключения помимо присвоения отрицательной длины файла. Например, файл открыт только для чтения.


А файл кто открывает? АС Пушкин?
При создании потока на запись и нужно проверять исключение.


 
Джо ©   (2005-08-21 21:03) [7]

Я бы в данном случае не перехватывал исключение, а передавал бы его выше. На усмотрение вызывающего кода.
Если бы и перехватил при помощи except (ну, мало ли - чтобы вывести вразумительное сообщение, например), то обязательно сгенерировал исключение повторно при помощи raise.
--
Разумеется, имхо. Каждый пишет, как может и как считает нужным :)


 
Джо ©   (2005-08-21 21:06) [8]

И вообще, наверное, предпочел бы проверку входных параметров. И по факту несоответствия делал бы raise:

if FileStream.Size<19 then
 raise Exception.Create ("blablabla!");
FileStream.Size := FileStream.Size-20;

Или assert использовал. Даже более вероятно, ибо упрощает структуру кода.


 
Eraser ©   (2005-08-21 21:09) [9]

Джо ©   (21.08.05 21:06) [8]

А вот это вариант не лишён логики, особенно если требуется, чтобы поток был обязательно урезан именно на 20 байт.



Страницы: 1 вся ветка

Текущий архив: 2005.09.18;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.04 c
5-1099337235
Евгыш
2004-11-01 22:27
2005.09.18
Установка компонента


1-1125234683
Lamer'Ok
2005-08-28 17:11
2005.09.18
Как перетащить форму?


5-1098760190
Kair()
2004-10-26 07:09
2005.09.18


1-1124785381
volser
2005-08-23 12:23
2005.09.18
Как приостановить поток?


14-1124825507
TStas
2005-08-23 23:31
2005.09.18
Кто сколько времени потратил на самостоятельное изучение Делфи?