Article View: pl.comp.lang.delphi
Article #334947Re: try... finally i except na doczepke ;-)
From: Krzysztof Szyszka
Date: Mon, 30 Jan 2012 19:00
Date: Mon, 30 Jan 2012 19:00
37 lines
3087 bytes
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-mailReferences:
<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