Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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.011 c
3-1123517781
Ruslan D
2005-08-08 20:16
2005.09.18
Просмотр пользователей в Firebird


8-1115122982
Fire
2005-05-03 16:23
2005.09.18
использование моделей из 3dMax


4-1122246995
timon84
2005-07-25 03:16
2005.09.18
Отловить нажатие кнопки пуск


2-1123756991
Гость22
2005-08-11 14:43
2005.09.18
Как узнать, какая клавиша нажата в DBNavigator?


3-1123148932
Koralnik
2005-08-04 13:48
2005.09.18
Запрос в базу данных удаленного сервера





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский