Форум: "Потрепаться";
Текущий архив: 2005.09.18;
Скачать: [xml.tar.bz2];
ВнизОпять спор об исключениях. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c