![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
try or if
syte_ser78 © (2005-07-20 15:02:00)Что правильнее использывать try или if? В смысле
if условие действие
else условие действие
или
try
действие
except
действие
end;
при условии возможности критических ошибок
например
var
a:integer;
...
a:=0,5;
Alexander Panov (2005-07-20 15:51:00) [41]syte_ser78 © (20.07.05 15:49) [10]
if Pos(DecimalSeparator,edit1.Text)>0
then atr[k].TextString:=strtofloat(edit1.Text)
else atr[k].TextString:=strtoint(edit1.Text);
;)
syte_ser78 (2005-07-20 15:49:00) [42]Вобщем вот кусок кода. Скорее всего о дествительно глупый.
Нужно полученное число из едита записать в виде Х если оно интежер либо Х,Х если флоат.
...
try
atr[k].TextString:=strtoint(edit1.Text);
except
atr[k].TextString:=strtofloat(edit1.Text);
end;
...
Гаврила (2005-07-20 15:45:00) [43]
> [7] syte_ser78 © (20.07.05 15:25)
> Alexander Panov © (20.07.05 15:15) [6]
> Ок.
одно из самых страшных вещей в программе - сокрытие ошибок, которое часто является следствием понаставленных везде секций Except.
Скорее всего
Если входные данные неверны - надо так и сказать "уважаемый пользователь ,мы глубоко обескуражены. неужели ты не видишь ,что твои данные неверны?"
а вовсе не превратить 0.5 в 0 или в 1, если это должно быть целое.
Классический пример следствия сокрытия ошибок я наблюдал на одной из прошлых работ:
Подключаемся к базе данных ,выводим данные в таблицу.
Возможные ошибки при получении данных (например ,сервер недоступен) блокированы в секции Except
в результате запускаем программу и видим: таблица пуста
а дальше и чеши репу - что случилось - толи действительно нет данных в базе, толи произошла ошиьбка - а самое интересное - какая именно ошибка???
Так что смотри сам от задачи.
Функция StrToInt может вернуть результат типа Integer, а может не вернуть ничего (поднять исключение) ,и это мудро.
:-))
evvcom (2005-07-20 15:43:00) [44]
> моежет быть либо правильно (что я делаю по траю) либо нет
> (что по эксепту)
Если это правильно/неправильно можно определить без генерации исключительной ситуации, то лучше до этого и не доводить и использовать if
syte_ser78 (2005-07-20 15:25:00) [45]Alexander Panov © (20.07.05 15:15) [6]
Ок.
Просто в томто и дело что в моем случае моежет быть либо правильно (что я делаю по траю) либо нет (что по эксепту) Скорость особой роли не играет (операция выполняется по онклику кнопки не чаще 2-3 раз в минуту)
Alexander Panov (2005-07-20 15:15:00) [46]Операции по обработке Exception - довольно длительный процесс.
Кроме этого, блоки try..except..end не предназначены для ветвления программ по условию.
Поэтому используй if и не мучайся сомнениями, а участки кода, в которых потенциально могут возникнуть ошибки, оборачивай в защищенный блокю
Eraser (2005-07-20 15:12:00) [47]
a:integer;
...
a:=0,5;
компилятор материться будет.
Eraser (2005-07-20 15:11:00) [48]syte_ser78 © (20.07.05 15:07) [2]
Буду иметь ввиду )
__
По сабжу: первое - оператор условия, второе - блок опознавания/обработки исключительных ситуаций.
Для условия лучше первое, для определения исключений - второе.
REA (2005-07-20 15:11:00) [49]If быстрее, но может не сработать.
Пример какой то странный...
syte_ser78 (2005-07-20 15:07:00) [50]Первое цикл. Второе условие.
Для цикла лучше первое.
Eraser (2005-07-20 15:06:00) [51]Встречный вопрос: что лучше for..to..do или if..then..else ?