Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Try - except - finally (https://www.delphipraxis.net/176835-try-except-finally.html)

bernau 30. Sep 2013 10:04

AW: Try - except - finally
 
Zitat:

Zitat von Furtbichler (Beitrag 1230319)
Wenn Du es 'falsch' angehst: Ja.

Wieder was gelernt ;-)

idefix2 30. Sep 2013 10:46

AW: Try - except - finally
 
Welchen Sinn es haben soll und inwieweit es "richtiger" sein soll, die finalen Aufräumarbeiten und die Fehlerbehandlung in zwei getrennte Prozeduren zu stecken, wobei eine die andere aufruft, erschliesst sich mir überhaupt nicht (ausser, mit dem Auftraggeber ist ein Zeilenhonorar vereinbart :) ). Das Programm wird dadurch weder besser lesbar noch übersichtlicher, eher im Gegenteil.

Daniel 30. Sep 2013 11:42

AW: Try - except - finally
 
Oftmals wird eine Code-Stelle, an der eine Exception auftritt, gar nicht in der Lage sein, eine Entscheidung zu treffen, wie mit der Situation umgegangen werden soll. In diesem Fall ist sie geradezu gezwungen, die Exception nach draußen zu reichen.

Der schöne Günther 30. Sep 2013 15:27

AW: Try - except - finally
 
Als kleiner Einwurf der hier garantiert niemanden wirklich weiterbringt: In den ersten Tagen (Wochen?) Delphi habe ich mich auch immer wieder daran gerieben, kein try-except-finally zu haben. Um ehrlich zu sein, gefällt mir der Delphi-Weg mittlerweile besser, es ist einfach nur eine Gewöhnungssache.

Mir ist im Nachhinein auch aufgefallen dass wenn mich das rein optisch (von der Einrückung) her anfing zu stören, meine Methoden eh viel zu lang waren.

PS: Wann kommt endlich ARC auf den Desktop? Damit spart man sich wohl endlich 95% aller
Delphi-Quellcode:
Referenz := TObject.Create();
try
  [...]
finally
  Referenz.Destroy();
end;
sparen :wink:

silver-moon-2000 30. Sep 2013 15:37

AW: Try - except - finally
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1230355)
Delphi-Quellcode:
Referenz := TObject.Create();
try
  [...]
finally
  Referenz.Destroy();
end;
sparen :wink:

Jetzt mal blöd gefragt,
fliegt Dir das nicht doch noch um die Ohren, wenn die Erzeugung von Referenz fehlschlägt?
Sollte man nicht besser
Delphi-Quellcode:
Referenz.Free
aufrufen,
denn das prüft doch noch auf
Delphi-Quellcode:
<> nil
, bevor es destroy aufruft?
Oder denke ich falsch?

mkinzler 30. Sep 2013 16:15

AW: Try - except - finally
 
Ja, .Destroy() sollte man nie direkt aufrufen.

Furtbichler 30. Sep 2013 16:36

AW: Try - except - finally
 
Zitat:

Zitat von idefix2 (Beitrag 1230338)
Welchen Sinn es haben soll und inwieweit es "richtiger" sein soll, die finalen Aufräumarbeiten und die Fehlerbehandlung in zwei getrennte Prozeduren zu stecken, wobei eine die andere aufruft, erschliesst sich mir überhaupt nicht (ausser, mit dem Auftraggeber ist ein Zeilenhonorar vereinbart :) ).

Jede Methode soll genau eine Sache machen. Die Beschreibung der Methode sollte kein 'und' enthalten. Wenn doch, sollte man 2x hinschauen, ob man die Methode nicht aufsplitten kann. Kommentare (außer Rechtshinweise, Beschreibung von speziellen Algorithmen und vielleicht Klassenbeschreibungen) sind überflüssig, wenn man seinen Code so schreibt, das er -vorgelesen- genau das beschreibt, was er macht. Und das gelingt nur, wenn man die Methoden so aufdröselt, das sich die Beschreibung einer Methode in ihrem Namen widerspiegelt und sie keine Seiteneffekte hat. Für meine Begriffe ist das die einzige Möglichkeit, Programme zu schreiben, die auch für andere schnell begreifbar sind.

Du kannst natürlich auch alles in eine Methode packen, klar. Das mag bei einem einzeiligen Aufruf (und den einfachen Beispielen hier) noch funktionieren, aber das wird schnell unübersichtlich, wenn Aufräumarbeiten, Fehlerbehandlung usw komplexer werden. Es ist einfacher, sich an dieses oder ein ähnliches Pattern zu halten. Du kannst das natürlich sein lassen und alles in eine Methode packen, ganz wie es Dir gefällt.

Der schöne Günther 30. Sep 2013 19:18

AW: Try - except - finally
 
Zitat:

Zitat von silver-moon-2000 (Beitrag 1230356)
Zitat:

Zitat von Der schöne Günther (Beitrag 1230355)
Delphi-Quellcode:
Referenz := TObject.Create();
try
  [...]
finally
  Referenz.Destroy();
end;
sparen :wink:

Jetzt mal blöd gefragt,
fliegt Dir das nicht doch noch um die Ohren, wenn die Erzeugung von Referenz fehlschlägt?
Sollte man nicht besser
Delphi-Quellcode:
Referenz.Free
aufrufen,
denn das prüft doch noch auf
Delphi-Quellcode:
<> nil
, bevor es destroy aufruft?
Oder denke ich falsch?

Ich sehe hier kein Problem. Wenn ich in den try-Block reinkomme, war der Konstruktor erfolgreich und es gibt eine gültige Referenz.

Fliegt der Konstruktor bereits raus, wird der try-Block erst garnicht ausgeführt (aber der Destruktor des Objekts aufgerufen).

Furtbichler 30. Sep 2013 19:59

AW: Try - except - finally
 
Alles richtig, Günni.

Aviator 30. Sep 2013 21:09

AW: Try - except - finally
 
Zitat:

Zitat von Furtbichler (Beitrag 1230319)
Zitat:

Zitat von Bernhard Geyer (Beitrag 1230307)
Da wird man wohl diese Sprachunschönheit akzeptieren müssen und doppelt aufbauen

Das ist Geschmackssache. In C# gehts auch nicht und das ist auch OK so (imho).

Ich muss es einfach auch nochmal sagen. Natürlich gibt es in C# ein Try-Catch-Finally Block ;)

Sieht dann in etwa so aus:

Code:
try
{
    DoSomething();
}
catch (InvalidOperationException ex) // Oder was auch immer für eine Exception
{
    HandleException();
}
catch (Exception ex) // Noch andere Exceptions abfangen
{
    HandleAnotherException();
}
finally
{
    MakeTheFinalStep();
}


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:05 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz