Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
2-1216888966
evgenij
2008-07-24 12:42
2008.08.31
Пропадает рисунок на канве


2-1216745096
Дима
2008-07-22 20:44
2008.08.31
Как расчитать MD5 - хеш самого себя (Приложения)


1-1197552021
Zheksik
2007-12-13 16:20
2008.08.31
запретить вывод на консоль


2-1216793238
TUserClass
2008-07-23 10:07
2008.08.31
Кнопочка на табе (заголовке) у TabSheet.


15-1215575465
engine
2008-07-09 07:51
2008.08.31
Поздравляю с победой на ImagineCup