![]() |
Re: Funktion ohne Result?
Hi!
@Sakura: Ich dachte der Try-Block wird verlassen, wenn das Erase fehlschlägt. Ist das nicht der Fall? Ciao Frederic |
Re: Funktion ohne Result?
Zitat:
PS: Zitat:
PS2: Na ja, es ist auch 'ne schwirige Entscheidung, wann es überflüßig ist/ausgeführt wird, oder nicht...
Delphi-Quellcode:
Try
Result:=False; // das wird wohl "immer" ausgeführt (egal ob ein Fehler passiert, oder nicht) {mach was Kritisches} Finally ... end;
Delphi-Quellcode:
Try
{mach was Kritisches} Result:=False; // hier sieht das ja aunders aus. Finally ... end; |
Re: Funktion ohne Result?
Warum eigentlich nicht einfach so?
Delphi-Quellcode:
da wird das Identities.Free auch immer ausgeführt wenn das TIniFile.Create erfolgreich ist, und wenn nicht wird das result auf False gesetzt, wobei man den äußeren Try-Exceptblock weglassen könnte da TIniFile.Create nie schief geht außer der Speicher ist voll.
function DeleteUser(user: String): Boolean;
var Identities: TIniFile; begin try Identities:=TIniFile.Create(ExtractFilePath(paramstr(0))+'\Identities.dat'); try Identities.EraseSection(user); result := True; except result := False; end; Identities.Free; except result := False; end; end; |
Re: Funktion ohne Result?
Hi!
Wozu dient der äußerste Try-Block? Ciao Frederic |
Re: Funktion ohne Result?
Moin Zusammen,
noch einmal anderes forumliert: Try/Finally wird auch als Resourcenschutzblock bezeichnet. Er dient dazu sicherzustellen, das belegte Resourcen, auch im Falle eines Fehlers, wieder freigegeben werden. Try/Except dient hingegen dazu die Kontrolle über die Steuerung zu behalten falls ein Fehler auftritt, so dass man eben, wie es hier sein soll, einen entsprechenden Return Code setzen, und ansonsten die Exception unterdrücken kann. Genau durch die Verwendung dieser Blöcke teilt man dem Compiler ja mit, wo er für eventuelle Fehler zusätzlichen Code generieren soll. Inwiefern etwas kritisch für die Programmlogik ist, wird der Compiler nicht entscheiden können. Der Hinweis, dass die Initialisierungszeile nicht mit übersetzt wird kann dann schon einen Hinweis darauf geben, dass man etwas geschrieben hat, dass nicht so läuft wie gedacht. |
Re: Funktion ohne Result?
Moin Sir Thornberry,
Zitat:
Wenn EraseSection eine Exception auslöst wird zweimal hintereinander Result auf false gesetzt, und die Prozedur verlassen, ohne die Identities.Free Zeile auszuführen. |
Re: Funktion ohne Result?
Hi!
Ok, dann baue ich da mal um. Danke. Ciao Frederic |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz