![]() |
| ||
|
|
Новости |
Поиск |
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-21 17:57:00) [21]ki11er (21.07.05 17:52) [29]
так как здесь почти все построено на исключениях и они просто навязываются кодеру
хм. блин, так и хочется ругнуться.
Это еще откуда взято такое?
ki11er (21.07.05 17:52) [29]
Во всех остальных случаях считаю, что использовать исключения не стоит
Первый пример в [28].
Второй пример:
Копируется файл на дискетку. в это время пользователь дискетку вынимает.
Действия программы?
ki11er (2005-07-21 17:55:00) [22]2 Alexander Panov:
Да, это как раз пример "навязывания" о котором я говорил выше. В дэлфи даже файлстрим не удастся открыть без обработки исключений.
Не знаю, хорошо это или плохо. Сам склоняюсь ко второму варианту.
ki11er (2005-07-21 17:52:00) [23]>Например: юзер должен ввести число и программа возведет его в
>квадрат. если юзер ввел НЕ число, то логично поднять исключение.
Не хочу начинать "священные войны", но для чего здесь исключение?
>Обоойтись то без исключений можно всегда.
Хорошо, перефразирую: Когда обойтись без исключений достаточно сложно. Т.е. когда очень высокий уровень вложенности вызовов и нужно "резко" выйти наверх без трансляции кода ошибки через все N уровней. Во всех остальных случаях считаю, что использовать исключения не стоит. То, что я говорю не относится к Delphi, так как здесь почти все построено на исключениях и они просто навязываются кодеру. Это мое имхо и особо спорить на эту тему я не хочу. Если кому-то нравится пользоваться исключениями - дело ваше.
Alexander Panov (2005-07-21 17:51:00) [24]jack128 © (21.07.05 17:38) [27]
Обоойтись то без исключений можно всегда.
procedure TMyThread.Execute;
begin
...
FStrHTML := MyTIdHTTP.Get(' http://www.delphimaster.ru/cgi-bin/forum.pl?id=1&n=0');
...
end;
Здесь можно обойтись без обработки ошибок?
jack128 (2005-07-21 17:38:00) [25]ki11er (21.07.05 14:58) [23]
Лично мое мнение - try...except нужно только там, где действительно нужно (т.е. когда по-другому никак нельзя сделать).
а вот по моему когда "действительно нужно" и когда "по другому нельзя сделать" - это абсолютно разные вещи. Обоойтись то без исключений можно всегда.
ИМХО, исключения нужно использовать тогда, когда возникает ошибка. А вот что считать ошибкой зависит от условия задачи.
Например: юзер должен ввести число и программа возведет его в квадрат. если юзер ввел НЕ число, то логично поднять исключение.
Другой пример: если юзер вводит число(код товара) то программа ищет товар в БД, иначе заданная последовательность символов интерпритируется как название нового вида товаров. Тут нету ошибки в логике, потому и нету смысла поднимать исключение, а потом перехватывать его...
syte_ser78 (2005-07-21 17:32:00) [26]обшибся радиобатоны там.
ki11er (2005-07-21 17:13:00) [27]Скажу честно - нету у меня такой галочки :)
syte_ser78 (2005-07-21 16:41:00) [28]ki11er (21.07.05 14:58) [23]
> в случае ошибок нужно так или иначе сообщать об этом
> пользователю, а не тихо делать вид, что все в порядке
:)))
Скажи честно. Галочку в "Мой компьютер/свойства/дополнительно/отчет об ошибках/включить отчет об ошибках"
снял? :)))
ki11er (2005-07-21 14:58:00) [29]>Да не важно это ...
В данном случае, конечно, не важно. Но это еще не повод вводить людей в заблуждение. Лично мое мнение - try...except нужно только там, где действительнонужно (т.е. когда по-другому никак нельзя сделать). Причем, как очень правильно, imho, сказал Гаврилав случае ошибок нужно так или иначе сообщать об этом пользователю, а не тихо делать вид, что все в порядке.
Anatoly Podgoretsky (2005-07-20 22:35:00) [30]Да не важно это, он даже до конца не успеет дожать клавишу, как исключение сработает и при том несколько тысяч раз успеет сработать, в надо еще и отжать клавишу.
О времени стоит говорить только в огромных циалах без участия пользователя.
ki11er (2005-07-20 22:00:00) [31]>Саша, я вас умоляю... Это ложь.
Вы это серьезно? попробуйте замерить время выполнения следующих конструкций и не говорите чепуху.
1. ptr := nil; if ptr <> nil then begin ptr^ := 3; end;
2. ptr := nil; try ptr^ := 3; except end;
Время выполнения различается в десятки, если не в сотни раз.
Dok_3D (2005-07-20 21:44:00) [32]2 Alexander Panov © (20.07.05 15:15) [6]
Операции по обработке Exception - довольно длительный процесс.
Саша, я вас умоляю... Это ложь.
Кроме этого, блоки try..except..end не предназначены для ветвления программ по условию.
С этим соглашусь, придуманы другие конструкции для таких вещей. Но по большому счету - почему нет?
2 syte_ser78 © (20.07.05 15:02)
Что правильнее использывать try или if? В смысле
Поверь, в твоем случае - это без разницы. Осознай для себя оба варианта и варьируй ими как тебе вздумается.
syte_ser78 (2005-07-20 16:21:00) [33]Anatoly Podgoretsky © (20.07.05 16:18) [18]
Извините, если пересказывать всю программу и говорить почему в некоторых случаях я применил едиты в некоторых лабелы будет очень долго. на вопрос уже ответил msguns
Anatoly Podgoretsky (2005-07-20 16:18:00) [34]edit1 и ридонли, не знаешь что компоненты не редактирования?
syte_ser78 (2005-07-20 16:11:00) [35]Anatoly Podgoretsky © (20.07.05 16:07) [16]
> edit1.Text := 'QWERTY'
edit1 - ридонли
Anatoly Podgoretsky (2005-07-20 16:07:00) [36]syte_ser78 © (20.07.05 15:02)
Что правильние
A := 10 или ShowMessage(S)
syte_ser78 © (20.07.05 15:49) [10]
edit1.Text := 'QWERTY'
PVOzerski (2005-07-20 16:05:00) [37]Ну, в приведенном-то коде в любом разе шло присвоение результата функции одной и той же переменной (или свойству) atr[k].TextString. Это либо что-то с плавающей точкой, либо Variant. Исходя из чего и [13].
msguns (2005-07-20 15:59:00) [38]Const // Что писать, если отсутствуют
NullFlt: double = 0.131313;
NullInt: integer = 131313;
var
vFlt: double;
vInt: integer;
begin
vFlt := StrToFloatDef(edit1.Text,NullFlt);
vInt := StrToIntDef(edit1.Text,NullInt);
end;
PVOzerski (2005-07-20 15:59:00) [39]Может, я во что-то не врубился... Если atr[k].TextString - не Variant, внутреннее содержимое которого предполагается парсить на более низком уровне, то хватит atr[k].TextString:=strtofloat(edit1.Text) - без всяких if или try.
Eraser (2005-07-20 15:54:00) [40]syte_ser78 © (20.07.05 15:49) [10]
см. TryStrToInt.