Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

try or if


Страницы:   1 2 3

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 ?


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо