🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.delphi
Article #334947

Re: try... finally i except na doczepke ;-)

#334947
From: Krzysztof Szyszka
Date: Mon, 30 Jan 2012 19:00
37 lines
3087 bytes
Użytkownik "Michał Zaborowski" napisał w wiadomości ...
> Załóżmy, że otwieram plik, czytam i przy okazji coś tam sobie dziergam.
> Duży blok może mieć sens np. ze względów wydajnościowych. Przeglądam
> plik, wybierając co potrzebniejsze kąski, zamiast wszystko wywlekać do
> ramu. No i teraz może mi się to wywalić na kilka sposobów, więc daję
> kilka exceptów - na różne okazje. Problemem jest zamykanie pliku. Mogę
> dać na koniec, po exceptach, ale to jest słaby pomysł. Jak gdzieś dam
> re-raise... Czyli powinienem wwalić zwalnianie do wszystkich sekcji
> except. Można by dać final i tam sprawdzić, czy uchwyt nie jest null i
> wtedy zwolnić. Wiem doskonały przykład to nie jest, ale mam nadzieję,
> że udało mi się pokazać o co chodzi...

No chyba nie do końca. Jeśli główny blok przetwarzania danych
ujmiesz w try [blok] finally end, to niezależnie od tego, czy w bloku
wystąpi wyjątek i będziesz go propagował wyżej, czy też nie, to
sekcja zawarta między finally i end zawsze się wykona, więc
wystarczy, jak zamykanie pliku tylko tam umieścisz.

A tak w ogólę, to dziwię się, że używanie try finally end nadal sprawia problemy.
Przecież taki blok stosuje się de-facto mechnicznie:
1. Jeśli przed try jest Open, to po finally musi być Close
2. Jeśli przed try jest Create, to po finally musi być Free (Destroy)
3. Jeśli przed try jest Lock := True, to po finally musi być Lock := False;
i wszystkie inne tego typu przypadki.

Przy analizie bloku try finally end jest właściwie bez znaczenia, jaki kod znajduje się
między try, a finally. Ważne jest tylko to, że skoro wykonało się to, co jest przed try,
to zawsze musi wykonać się to, co jest między finally i end. Zapewnia to dalsze
"poprawne" działanie programu, niezależnie od tego, jakie wyjątki wystąpią w [blok].

-- 
pozdrowienia
Krzysztof Szyszka, X-Files Software
Developer of X-Files Components
Borland/CodeGear/Embarcadero Technology Partner
_________________________________________
Website: http://www.x-files.pl/  E-mail: news@x-files.pl
Technical Details
Message-ID: <jg6pgh$ghn$1@inews.gazeta.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
References: <1bm36j6wkeihw$.dlg@hell.heaven> <jg0atn$3qv$1@inews.gazeta.pl> <jg6mil$t7i$1@news.icm.edu.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
From: "Krzysztof Szyszka" <nomail@gazeta.pl>
Newsgroups: pl.comp.lang.delphi
Subject: Re: try... finally i except na doczepke ;-)
Date: Mon, 30 Jan 2012 20:00:49 +0100
Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
Lines: 38
Message-ID: <jg6pgh$ghn$1@inews.gazeta.pl>
References: <1bm36j6wkeihw$.dlg@hell.heaven> <jg0atn$3qv$1@inews.gazeta.pl> <jg6mil$t7i$1@news.icm.edu.pl>
NNTP-Posting-Host: 89-78-213-108.dynamic.chello.pl
Mime-Version: 1.0
X-Trace: inews.gazeta.pl 1327950161 16951 89.78.213.108 (30 Jan 2012 19:02:41 GMT)
X-Complaints-To: usenet@agora.pl
NNTP-Posting-Date: Mon, 30 Jan 2012 19:02:41 +0000 (UTC)
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.6157
X-Priority: 3
X-Newsreader: Microsoft Outlook Express 6.00.2900.5931
X-User: kszyszka1
X-MSMail-Priority: Normal
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit