Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.022 c
1-1125132162
Lamer@fools.ua
2005-08-27 12:42
2005.09.18
Ещё один баг в D6


10-1102440321
bw
2004-12-07 20:25
2005.09.18
Excel: свойства ячейки.


1-1125249838
heady
2005-08-28 21:23
2005.09.18
работать с Tmemo как с тесктовывм файлом


3-1123488421
Ярослав
2005-08-08 12:07
2005.09.18
Доступ к таблице Paradox


14-1124503939
OldNaum
2005-08-20 06:12
2005.09.18
Browsers Vs Clients




   Наверх