Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Try..Finally (https://www.delphipraxis.net/8229-try-finally.html)

Pseudemys Nelsoni 31. Aug 2003 16:32


Try..Finally
 
hoi,

ich habe folgende function geschrieben...

Delphi-Quellcode:
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;
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?

CalganX 31. Aug 2003 16:35

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:
Hier im Forum suchentry finally
Delphi Hilfe -> try...finally

Chris

Pseudemys Nelsoni 31. Aug 2003 16:37

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?

Chewie 31. Aug 2003 16:42

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.

CalganX 31. Aug 2003 16:43

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. ;)

Pseudemys Nelsoni 31. Aug 2003 16:48

Re: Try..Finally
 
danke für die antworten ;)

ab wo bring ich sie denn an?

gleich zu begin?

CalganX 31. Aug 2003 16:51

Re: Try..Finally
 
Delphi-Quellcode:
sl := TStringList.Create;
try
  {...}
finally
  sl.Free;
end;
So ungefähr.

Chris

Pseudemys Nelsoni 31. Aug 2003 16:51

Re: Try..Finally
 
danke ^^

Chewie 31. Aug 2003 16:52

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;

Pseudemys Nelsoni 31. Aug 2003 16:53

Re: Try..Finally
 
danke nochmal :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:17 Uhr.
Seite 1 von 2  1 2      

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