Текущий архив: 2008.08.31;
Скачать: CL | DM;
Вниз
try..finally Найти похожие ветки
← →
valer4 (2008-07-23 21:54) [0]как правильно cделать 1) или 2)?
1)with ExampleForm.Create(Self) do
try
Caption := "Example";
ShowModal;
finally
Free;
end;
2)with ExampleForm.Create(Self) do
begin
Caption := "Example";
try
ShowModal;
finally
Free;
end;
end;
← →
Сергей М. © (2008-07-23 22:01) [1]Если ты уверен в том, что строчка
Caption := "Example";
не вызовет исключения, то оба варианта имеют право на "правильность",
иначе 2)
← →
palva © (2008-07-23 22:02) [2]
> иначе 2)
то есть 1)
← →
easy © (2008-07-23 22:03) [3]1)
← →
Anatoly Podgoretsky © (2008-07-23 22:11) [4]> valer4 (23.07.2008 21:54:00) [0]
А почему ты спрашиваешь.
Попробуй сам объяснить почему в 1 Caption выше, а в 2 ниже. Как ты понимаешь работу этого кода.
← →
Johnmen © (2008-07-23 22:19) [5]Если Caption := "Example"; приводит к исключению, это значит, что не работает процессор, или память сбоит :))
← →
easy © (2008-07-23 22:41) [6]try Object Pascal Language Guide
← →
Сергей М. © (2008-07-24 09:47) [7]
> Johnmen © (23.07.08 22:19) [5]
>
> Если Caption := "Example"; приводит к исключению, это значит,
> что
.. что автор крупно напортачил в своем проекте, что вовсе не исключено)
← →
Vlad Oshin © (2008-07-24 10:03) [8]with ExampleForm.Create(Self) do
а вот эта строка почему не в try?
ИМХО,
гораздо более большая вероятность, что форма не создаться, чем что ее не удасться показать.
← →
Медвежонок Пятачок © (2008-07-24 10:05) [9]а вот эта строка почему не в try?
А зачем её собственно в try except обертывать?
← →
Johnmen © (2008-07-24 10:08) [10]
> Vlad Oshin © (24.07.08 10:03) [8]
Исключение при несоздании объекта аналогично [5], т.е. компьютер неработоспособен.
← →
palva © (2008-07-24 10:10) [11]
> Если Caption := "Example"; приводит к исключению, это значит,
> что не работает процессор, или память сбоит :))
>
Куда важнее позаботиться о душевном здоровье тех, кто будет читать этот код, а также о собственной репутации у коллег.
← →
oldman © (2008-07-24 10:13) [12]
> Если Caption := "Example"; приводит к исключению, это значит,
> что не работает процессор, или память сбоит
Тогда эта... Всю программу надо в try except запихивать
← →
ANB (2008-07-24 10:18) [13]
> Тогда эта... Всю программу надо в try except запихивать
Она и так засунута.
← →
Johnmen © (2008-07-24 10:19) [14]
> palva © (24.07.08 10:10) [11]
Извини, не догнал...
> oldman © (24.07.08 10:13) [12]
> Тогда эта... Всю программу надо в try except запихивать
Ну если хочешь заложиться на битую память, то да.
Только битая память это проблема твоей программы?
← →
ANB (2008-07-24 10:20) [15]Создание объекта засовывать в блок нету смысла (во всяком случае - такой), т.к. если он не создаться, то и разрушать нечего будет.
← →
Vlad Oshin © (2008-07-24 10:31) [16]а если при создании, вызывается создание еще чего(стороннего), где возможна необработанная ошибка?
это просто, накидал, где не создается, т.е. убитая память ни при чем
tFormQ = class(TForm)
end;
var
Form3: TForm3;
f:tformQ;
implementation
{$R *.dfm}
procedure TForm3.Button1Click(Sender: TObject);
begin
with f.Create(self) do // <--------- AV
begin
f.Show;
end;
end;
← →
Vlad Oshin © (2008-07-24 10:33) [17]... Если Caption := "Example"; ...
а если метод SetCaption вызывает еще кучу чего? :)
← →
palva © (2008-07-24 10:33) [18]
> Извини, не догнал...
Ну типа, если напишешь 2), то у большинства программистов, это прочитавших, возникнут вопросы о смысле жизни или сомнения в адекватности автора.
Вон у нас какая ветка образовалась!
← →
Johnmen © (2008-07-24 10:38) [19]
> Vlad Oshin © (24.07.08 10:31) [16]
> а если при создании, вызывается создание еще чего(стороннего),
> где возможна необработанная ошибка?
Мы же люди серьезные и считаем, что программы написаны программистами, а не дураками?
← →
Johnmen © (2008-07-24 10:39) [20]
> palva © (24.07.08 10:33) [18]
А-а-а... Ну да...
← →
palva © (2008-07-24 10:41) [21]
> Vlad Oshin © (24.07.08 10:31) [16]
Само по себе Exception при создании объекта не страшен. Он может быть даже предусмотрен авторами класса и обрабатываться выше по иерархии. Использование try в [0] предназначено для того, чтобы free гарантированно выполнилось. А если Exception произошло при создании, то free выполнять не надо, поэтому Create стоит вне блока try.
← →
Johnmen © (2008-07-24 10:41) [22]
> Vlad Oshin © (24.07.08 10:33) [17]
> ... Если Caption := "Example"; ...а если метод SetCaption
> вызывает еще кучу чего? :)
Ты на грани! Можешь свалиться в программерскую паранойю :)
← →
Anatoly Podgoretsky © (2008-07-24 11:24) [23]
> А зачем её собственно в try except обертывать?
Что бы получить исключение в Finaly
← →
Anatoly Podgoretsky © (2008-07-24 11:26) [24]
> Мы же люди серьезные и считаем, что программы написаны программистами,
> а не дураками?
Зря ты так считаешь.
← →
Anatoly Podgoretsky © (2008-07-24 11:27) [25]palva © (24.07.08 10:33) [18]
У меня тоже такие сомнения зародились и не только по поводу автора.
Страницы: 1 вся ветка
Текущий архив: 2008.08.31;
Скачать: CL | DM;
Память: 0.52 MB
Время: 0.014 c