![]() |
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 :)
|
Re: Try..Finally
Hi! :)
:warn: Bin etwas spät drann, ich weiß. Hab gerade eigendlich nur nach einer Tokenize-Function gesucht. diese hier ist ja nicht schlecht, aber trotz dem Try ist sie nicht sicher. Wenn man einen Separator angibt, der in dem String garnicht enthalten ist, oder wenn die angegebene Zahl höher ist, als die Zahl der im String enthaltenen Token, dann stürzt das ganze Programm ab... Ich weiß nicht, wo die Function bei Euch eingesetzt wird, jedoch bei mir ist es so, dass der Programmanwender selbst die Separatoren setzen muss, und wenn der Anwender ein andres Zeichen als Separator angibt, könnte das in meinem Fall tierische Probleme geben... :witch: |
Re: Try..Finally
jo, hab sie aber nur für meine zwecke benutzt, und da mach ich solche fehler nicht
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:45 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