![]() |
Try..Finally
hoi,
ich habe folgende function geschrieben...
Delphi-Quellcode:
nunsagte mir ein freund das es besser wär da eine "try..Finally" anweisung mit unter zu bringen....aber wozu? es funkt doch alles? was wäre der vorteil?
function Tokenize(s: string; index: integer; sep: char): string;
var sl: TStringList; begin sl := TStringList.Create; Repeat if Pos(sep, s) <> 0 then begin sl.Add(Copy(s, 1, Pos(sep, s)-1)); Delete(s, 1, Pos(sep, s)); end else begin sl.Add(s); s := ''; end; until s = ''; Result := sl.Strings[index-1]; sl.Free end; |
Re: Try..Finally
Hi silent,
dein Freund hat absolut Recht. Grund ist der Ressourcenschutz. Wenn nun im try-Block irgendwas passiert, dann wird das, was im finally-Teil trotzdem ausgeführt. Siehe dazu auch: ![]() Delphi Hilfe -> try...finally Chris |
Re: Try..Finally
hallo chakotay,
ich verstehe nur nicht wieso es mit reinsoll, wenn ein fehler auftreten sollte (wie das passieren soll weiss ich leider nicht *g*), dann wird doch das "sl.free" am ende auch trozdem ausgeführt ohne try..finally? oder? |
Re: Try..Finally
Nein, wirds nicht. Wenn es durch einen Fehler zum Rausspringen aus dem Anweisungsblock führt, wird der Code dahinter nicht ausgeführt. Bei try..finally wird das nach finally immer ausgeführt.
|
Re: Try..Finally
Hi silent,
nein, wenn das Programm durch den Fehler beendet wird nicht! Außerdem ist sicher, sicher. ;) Chris PS: Chewie war schneller. Außerdem: ich hätte es nicht besser ausdrücken können, Chewie. ;) |
Re: Try..Finally
danke für die antworten ;)
ab wo bring ich sie denn an? gleich zu begin? |
Re: Try..Finally
Delphi-Quellcode:
So ungefähr.
sl := TStringList.Create;
try {...} finally sl.Free; end; Chris |
Re: Try..Finally
danke ^^
|
Re: Try..Finally
Grundsätzlich: try, nachdem das Objekt erzeugt wurde. finally, nachdem das Objekt seine Schuldigkeit getan hat und freigegeben wird.
In deinem Fall:
Delphi-Quellcode:
function Tokenize(s: string; index: integer; sep: char): string;
var sl: TStringList; begin sl := TStringList.Create; try repeat if Pos(sep, s) <> 0 then begin sl.Add(Copy(s, 1, Pos(sep, s)-1)); Delete(s, 1, Pos(sep, s)); end else begin sl.Add(s); s := ''; end; until s = ''; Result := sl.Strings[index-1]; finally sl.Free end; end; |
Re: Try..Finally
danke nochmal :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:17 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-2025 by Thomas Breitkreuz