Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi try..finally (https://www.delphipraxis.net/41899-try-finally.html)

RavenIV 10. Mär 2005 13:36


try..finally
 
mich würde interessieren, ob es einen unterschied zwischen
Delphi-Quellcode:
try
  begin
    anweisung1;
    anweisung2;
  end;
finally
   anweisung3;
und
Delphi-Quellcode:
try
  anweisung1;
  anweisung2;
finally
   anweisung3;
gibt.

gruessle

malo 10. Mär 2005 13:37

Re: try..finally
 
Ich wusste gar nicht, dass begin-end-Anweisungsblöcle bei Ressourcenblöckene erlaubt sind :gruebel:


Das zweite kannst du auf jeden Fall so verwenden, damit hatte ich noch nie Probleme :)

Das erste ist wohl eher doppelt gemoppelt ;)

RavenIV 10. Mär 2005 13:39

Re: try..finally
 
Zitat:

Zitat von malo
Ich wusste gar nicht, dass begin-end-Anweisungsblöcle bei Ressourcenblöckene erlaubt sind


auf jeden fall kam keine compiler-meldung...

freak4fun 10. Mär 2005 13:40

Re: try..finally
 
Es ist ein try...finally/except...end; - Block. ;)

MfG
freak

malo 10. Mär 2005 13:43

Re: try..finally
 
Zitat:

Zitat von RavenIV
Zitat:

Zitat von malo
Ich wusste gar nicht, dass begin-end-Anweisungsblöcle bei Ressourcenblöckene erlaubt sind


auf jeden fall kam keine compiler-meldung...

Naja, lass lieber die begins und ends weg. Damit hast du sicherlich keinen Nachteil und brauchst weniger zu tippen :)

Binärbaum 10. Mär 2005 13:56

Re: try..finally
 
Also wenn schon, dann sollte es der Vollständigkeit halber so heißen:

Delphi-Quellcode:
try
  anweisungsblock1;//wird solange ausgeführt, bis ein Fehler auftritt
finally
   anweisungsblock;//wird anschließend ausgeführt
end;
Scheinbar vergessen hier einge, dass ein try.. finally immer mit end; beendet werden muss. :wink:
Achso, zum eigentlichen Thema: der Code zwischen try und finally oder try und except muss nicht noch extra mit begin und end umschlossen werden.

MfG
Binärbaum

mr47 10. Mär 2005 14:56

Re: try..finally
 
Zitat:

Zitat von Binärbaum
Also wenn schon, dann sollte es der Vollständigkeit halber so heißen:

Delphi-Quellcode:
try
  anweisungsblock1;//wird solange ausgeführt, bis ein Fehler auftritt
finally
   anweisungsblock;//wird anschließend ausgeführt
end;

Genau. Und bei except anstatt von finally wird der except-block NUR bei einem Fehler ausgeführt.

FAlter 10. Mär 2005 15:38

Re: try..finally
 
BEGIN-END kann man überall im Code hinschreiben, wo man Anweisungen hinschreiben kann (und nicht nur da). TRY-Blöcke erfüllen beide Funktionen. Es ist also auch folgendes möglich:

Delphi-Quellcode:
if a then
try
  Anw1;
  Anw2;
except
  Anw3;
end;
Aus diesem Grund ist es völlig gleich, welche der beiden oben genannten Versionen verwendet werden. Ich wäre für das kürzere.

//edit: CODE- durch DELPHI-Tags ersetzt. FAlter

Binärbaum 10. Mär 2005 16:32

Re: try..finally
 
Zitat:

Zitat von FAlter
BEGIN-END kann man überall im Code hinschreiben, wo man Anweisungen hinschreiben kann (und nicht nur da).

Würde ich aber nicht gerade empfehlen. :wink: Die begin-end-Blöcke sollten ja in gewisser Weise auch die Struktur des Codes wiedergeben. Wenn man dann überall dort begin-end hinschreibt, wird das schnell unübersichtlich.

MfG
Binärbaum

mr47 10. Mär 2005 18:10

Re: try..finally
 
Zitat:

Zitat von Binärbaum
Zitat:

Zitat von FAlter
BEGIN-END kann man überall im Code hinschreiben, wo man Anweisungen hinschreiben kann (und nicht nur da).

Würde ich aber nicht gerade empfehlen. :wink: Die begin-end-Blöcke sollten ja in gewisser Weise auch die Struktur des Codes wiedergeben. Wenn man dann überall dort begin-end hinschreibt, wird das schnell unübersichtlich.

MfG
Binärbaum

oder vielleicht auch übersichtlicher! Je nachdem wie man sie anwendet! (Was heißt nicht nur da? Ja ich kann begin...end auf ein blatt papier schreiben :dance: :mrgreen: )


mfg

FAlter 10. Mär 2005 18:30

Re: try..finally
 
[OT]

Stimmt, wenn du es auf ein Papier schreibst, beschwert sich der Compiler auch nicht...

Nun ja, ich nutze begin..end nur da, wo ich es brauche, da ich schreibfaul bin, eine Ausnahme ist sowas:

Delphi-Quellcode:
if a then //wenn a = true
  if b then //und b = true
    Anw1
  else      //und b = false
    Anw2;

  if a then  //wenn a = true
    if b then //und b = true
      Anw1
  else       //wenn a = false, egal, was in b
    Anw2;
Da weiß weder ich noch Delphi ohne begin..end, welche Variante gemeint ist. (Ich möglicherweise doch wegen dem Einrücken.) Delphi meckert beim Compilieren nicht, aber ob es die Variante nimmt, die ich will?

[/ot]

Binärbaum 10. Mär 2005 19:31

Re: try..finally
 
[OT]
@FAlter:
Folgende Variante dürfte dann gemeint sein (unabhängig davon, wie man den Quelltext einrückt):
Delphi-Quellcode:
if a then //wenn a = true
  if b then //und b = true
    Anw1
  else      //und b = false
    Anw2;
Für die andere Variante wird begin..end benötigt:
Delphi-Quellcode:
if a then begin//wenn a = true
  if b then//und b = true
    Anw1;
end
else//wenn a = false
  Anw2;
[/OT]

MfG
Binärbaum

FAlter 10. Mär 2005 19:37

Re: try..finally
 
[ot]

Wie gesagt, ich nehm immer begin und end in solch einem Fall, da ich sonst möglicherweise selber durcheinanderkomme. In allen anderen Fällen versuch ich möglichst wenig zu schreiben also ohne Begin und end.

[/ot]

Manchmal mach ich auch sowas:

Delphi-Quellcode:

  with TBitmap.Create do
  try
    //...

    BitBlt(...); //BitBlt von {DieBitmap.}Canvas.Handle auf
                 //self.Canvas.Handle, also von der Kompo oder voms Form
  finally
    Free;
  end;
Vor allem, wenn ich zu faul bin, hochzuscrollen, um mit erstmal 'ne var Buffer: TBitmap anzulegen.

sECuRE 10. Mär 2005 20:13

Re: try..finally
 
Hi,

@FAlter/Binärbaum: Alternativ geht's auch so:
Delphi-Quellcode:
if (a) then
  if (b) then
    anw1
  else anw2;

// im gegensatz zu:
if (a) then
  if (b) then
    anw1
  else
else anw2;
cu

Speedmaster 10. Mär 2005 21:36

Re: try..finally
 
[OT] (BEGIN & END).SindGedachtfuer := 'Um mehrere Codezeilen auszuführen!'; [/OT]

Ist ja ein unterschied ob man..
Delphi-Quellcode:
if x < y then
DOWAS;
DOAUCHWAS;
..schreibt, oder..
Delphi-Quellcode:
if x < y then begin
  DOWAS;
  DOAUCHWAS;
end;
..schreibt, der compilierte Code dürfte denke ich allerdings nicht länger sein!

P.s.: Sry 4 Off Topic!

mr47 11. Mär 2005 12:42

Re: try..finally
 
Zitat:

Zitat von Speedmaster
[OT] (BEGIN & END).SindGedachtfuer := 'Um mehrere Codezeilen auszuführen!'; [/OT]

Ist ja ein unterschied ob man..
Delphi-Quellcode:
if x < y then
DOWAS;
DOAUCHWAS;
..schreibt, oder..
Delphi-Quellcode:
if x < y then begin
  DOWAS;
  DOAUCHWAS;
end;
..schreibt, der compilierte Code dürfte denke ich allerdings nicht länger sein!

P.s.: Sry 4 Off Topic!

Kein Problem :lol: @ begin..and: ich find's übrigens schlecht, wenn man das begin gleich hinter dem then schreibt. Ich hab mir inzwischen (imo) einen ziemlich guten Programmierstil angewohnt und ich finde sowas macht den Code so unstrukturiert.... Aber jeder muss wissen wie er das macht. (Ich setze auch bei if die Bedinung wenn sie länger als z.B. i=1 ist in Klammern)

mfg

Matze 11. Mär 2005 13:00

Re: try..finally
 
Die ganzen If-Anweisungen hier haben nichts mit der eigentlichen Problematik, die im 1. Beitrag angesprochen wurde, zu tun. Bitte kommt wieder zurück zum Thema, danke.

mr47 11. Mär 2005 13:15

Re: try..finally
 
Zitat:

Zitat von Matze
Die ganzen If-Anweisungen hier haben nichts mit der eigentlichen Problematik, die im 1. Beitrag angesprochen wurde, zu tun. Bitte kommt wieder zurück zum Thema, danke.

Doch. Er hat gefragt, ob das mit begin...end einen Unterschied macht. Und (genau) um das geht's immer noch!

Speedmaster 11. Mär 2005 13:26

Re: try..finally
 
Zitat:

Zitat von mr47
Kein Problem :lol: @ begin..and: ich find's übrigens schlecht, wenn man das begin gleich hinter dem then schreibt. Ich hab mir inzwischen (imo) einen ziemlich guten Programmierstil angewohnt und ich finde sowas macht den Code so unstrukturiert.... Aber jeder muss wissen wie er das macht. (Ich setze auch bei if die Bedinung wenn sie länger als z.B. i=1 ist in Klammern)

mfg

Ist meiner Meinung nach Geschmackssache!
Ich bevorzuge meinen Code so:

Delphi-Quellcode:
if anything > everything then begin
  WriteLn('Na du?');
  WriteLn('Heute abend zeit?');
end;

// Nach einem Leerzeichen weiter quelltext o. Kommentar und dannach der nexte Quelltext
if x > Y then MachNIX;

Und stimme mr47 zu, wir sind eigentlich noch beim Thema, den es geht ja um begin und end!


Alle Zeitangaben in WEZ +1. Es ist jetzt 18: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-2025 by Thomas Breitkreuz