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-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.


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

Наверх

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