AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Try-Finally und Try-Except zusammen nutzen?
Thema durchsuchen
Ansicht
Themen-Optionen

Try-Finally und Try-Except zusammen nutzen?

Ein Thema von OrNEC · begonnen am 25. Sep 2010 · letzter Beitrag vom 30. Sep 2020
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.137 Beiträge
 
Delphi 12 Athens
 
#11

AW: Try-Finally und Try-Except zusammen nutzen?

  Alt 25. Sep 2010, 18:25
Ich nutz ja recht selten etwas ala "div by null",
aber als ich mich das letzte mal verschrieben hatte, da war's glaub ich auch das div (div 0 statt div 10 geschrieben).
Mir ist aber so, als wenn ich sowas auch mal mit einem / hatte
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#12

AW: Try-Finally und Try-Except zusammen nutzen?

  Alt 26. Sep 2010, 16:03
Soweit ich weiß, kann man eine Gleitkommazahl durch 0 teilen (das Ergebnis ist dann NaN).

Und naja, Java meckert ziemlich viel rum:
  • Code:
    int answer() {}
    Code:
    int answer() {
        if (Math.random() < 0.5) { return 0; }
    }
    missing return statement
  • Code:
    int answer() throws Exception
       throw new Exception();
       return 42;
    }
    unreachable statement

MfG
Fabian
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
542 Beiträge
 
Delphi 11 Alexandria
 
#13

AW: Try-Finally und Try-Except zusammen nutzen?

  Alt 29. Sep 2020, 11:23
Hat sich hier eigentlich in den letzten 10 Jahren etwas getan? Ist in den nächsten 100 Jahren etwas zu erwarten?

Ich habe laufend Routinen, in denen sowohl Fehler abgefangen als auch Ressourcen freigegeben werden müssen. Dieses
Delphi-Quellcode:
Try
  Try
finde ich furchtbar, und man sieht es auch selten. Es soll auch einen Haufen Code erzeugen.
Was ist eigentlich damit, dürfte ein Profi sich sowas leisten, oder wäre sein Ruf dann dahin?
Delphi-Quellcode:
  Except
    Liste.Free;
    Stream.Free;
    Objekt.Free;
    Showmessage('Mist!');
    exit(False);
  end;
  Liste.Free;
  Stream.Free;
  Objekt.Free;
end;
Wenn es noch gestattet ist und nicht als OT angesehen wird, würde ich auch gern auf diesen Beitrag bei SO verweisen (selbstverständlich führt auch dort David Heffernan seine Klinge). Ich habe nämlich auch angefangen, sehr viele Prozeduren in Funktionen umzuwandeln, in denen der Wert über einen var-Parameter zurückgegeben wird und Result mitteilt, ob alles geklappt hat. If BestimmeWert(var Wert:string) then ... gefällt mir codetechnisch viel besser als
Delphi-Quellcode:
Wert := BestimmeWert;
If Wert <> 'then ...
.

Geändert von Benmik (29. Sep 2020 um 11:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman
Online

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.292 Beiträge
 
Delphi 12 Athens
 
#14

AW: Try-Finally und Try-Except zusammen nutzen?

  Alt 29. Sep 2020, 11:35
Hallöle...
Zitat:
Exit veranlasst die aufrufende Prozedur, mit der Anweisung nach dem Punkt fortzufahren, an dem die Prozedur aufgerufen wurde
http://docwiki.embarcadero.com/Libra...de/System.Exit
try/finally bewirkt das der Finally Block immer ausgeführt wird. Damit brauchst du die Freigaben nicht doppelt schreiben.
https://de.wikipedia.org/wiki/Don%E2...epeat_yourself

Geändert von haentschman (29. Sep 2020 um 11:40 Uhr)
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
542 Beiträge
 
Delphi 11 Alexandria
 
#15

AW: Try-Finally und Try-Except zusammen nutzen?

  Alt 29. Sep 2020, 11:37
Nein, schau doch noch mal hin ...
(zum Verständnis: haentschmanns Antwort ist nun nicht mehr, was sie mal war...)

Geändert von Benmik (29. Sep 2020 um 11:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman
Online

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.292 Beiträge
 
Delphi 12 Athens
 
#16

AW: Try-Finally und Try-Except zusammen nutzen?

  Alt 29. Sep 2020, 11:43
Zitat:
zum Verständnis: haentschmanns Antwort ist nun nicht mehr, was sie mal war
...wer kann denn schon ahnen, daß die Antwort gleich gelesen wird. Ich hatte die ersten Freigaben übersehen und mich auf das EXIT konzentriert.
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
542 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: Try-Finally und Try-Except zusammen nutzen?

  Alt 29. Sep 2020, 11:57
try/finally bewirkt das der Finally Block immer ausgeführt wird. Damit brauchst du die Freigaben nicht doppelt schreiben.
Na klar, die Freigabe klappt dann, aber die Exceptionbehandlung nicht mehr, das ist ja der Grund für das doppelte Try.

Aber jetzt anders, wie macht ihr das?
1. Doppeltes Try
2. Doppeltes Try umgehen
3. Zweite Variante doch wohl nicht, aber nur gefühlsmäßig, oder aus sachlichem Grund?

Geändert von Benmik (29. Sep 2020 um 12:00 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#18

AW: Try-Finally und Try-Except zusammen nutzen?

  Alt 29. Sep 2020, 12:35
Bevorzugt doppeltes Try.

Wenn möglich in Funktionen ausgelagert, die mir sagen, ob's erfolgreich war bzw. einen definierten Wert zurückgeben, mit dem ich garantiert weiter arbeiten kann.

Also ähnlich zu Deinem Beispiel mit Funktion und Var-Parametern.

Var-Parameter immer dann, wenn die Funktion mehr als einen Wert liefern muss oder im Fehlerfalle anders vorgegangen werden muss, als im Erfolgsfalle.

Also sowas:
Delphi-Quellcode:
if MeineFunktion(1..n Parameter) then begin
  // Weiterverarbeitung im Erfolgsfall.
end else begin
  // Weiterverarbeitung im Fehlerfall.
end;
// oder eben, Fehler in der Funktion werden vollständig behandelt und Rückgabewert ist für die Weiterverarbeitung geeignet.
Variabel := MeineFunktion(1..n Parameter);
In beiden Fällen gilt: Als Var-Parameter nur die, die auch verändert werden müssen, die übrigen als Const-Parameter.
Delphi-Quellcode:
function MeineFunktion(0..n Const-Parameter, 1..n Var-Parameter) : Boolean;
function MeineFunktion(1..n Const-Parameter) : BedarfsgerechterTyp;
Funtionen können als Rückgabewert ggfls. aber auch mal vom Typ "Record of wasauchimmer" sein, dann hat man zwar nur einen Rückgabewert, der kann aber als Record mehrere Werte enthalten (ist aber eher die Ausnahme, meist nur dann, wenn aus der Funktion irgendwas aufgerufen wird, was sowieso schon 'nen Record liefert.)
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
542 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: Try-Finally und Try-Except zusammen nutzen?

  Alt 29. Sep 2020, 12:54
Das wäre alles auch nach meinem Gusto (vielleicht ein bisschen außer dem doppelten Try). Angenehm zu wissen.
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.610 Beiträge
 
Delphi 10.3 Rio
 
#20

AW: Try-Finally und Try-Except zusammen nutzen?

  Alt 29. Sep 2020, 19:04
Ich mache das auch mit einem doppelten try . Nur bin ich mir nie so sicher, wie die Reihenfolge am sinnvollsten ist.

So:
Delphi-Quellcode:
try
  obj := TObject.Create;
  try
    // Some code
  except
    // Exception handling
  end;
finally
  obj.Free;
end;
Oder doch so:
Delphi-Quellcode:
try
  obj := TObject.Create;
  try
    // Some code
  finally
    obj.Free;
  end;
except
  // Exception handling
end;
Ich würde ja fast sagen, dass die letztere Variante die sinnvollere sein müsste. Weil prinzipiell könnte es ja schon im Constructor des zu erzeugenden Objektes knallen. In der ersten Variante würde das dann nicht abgefangen werden.

Wie seht ihr das?

PS: Ich würde mir auch ein try .. except .. finally Konstrukt wie in C# wünschen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:04 Uhr.
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