Delphi-PRAXiS
Seite 1 von 6  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Was würdet ihr von einem try-except-finally-Konstrukt halten? (https://www.delphipraxis.net/197492-wuerdet-ihr-von-einem-try-except-finally-konstrukt-halten.html)

Codehunter 10. Aug 2018 08:15

Delphi-Version: 10.2 Tokyo

Was würdet ihr von einem try-except-finally-Konstrukt halten?
 
Moin!

Wenn ich mir verschiedene Quellen so anschaue, insbesondere wenn man mit Datenbanken zu tun hat, fällt mir immer wieder auf wie sperrig das Exception-Handling eigentlich ist:
Delphi-Quellcode:
myBoolAllesOk := False;
try
  try
    myTransaction.StartTransaction;
    myDB.TuWas;
    myBoolAllesOk := True;
  except
    on E: EIrgendwas do myTransaction.Rollback;
  end;
finally
  if myBoolAllesOk then
    myTransaction.Commit;
end;
Und man muss sich drauf verlassen, dass die Transaction nicht auch noch zwischen dem Rollback und dem Commit zufällig anderswo eine Transaction gestartet hat. Um auf Nummer sicher zu gehen, gibts die mitlaufende boolsche Variable. Wie elegant wäre da sowas:
Delphi-Quellcode:
try
  myTransaction.StartTransaction;
  myDB.TuWas;
except
  on E: EIrgendwas do myTransaction.Rollback;
finally
  myTransaction.Commit;
end;
Soweit ich das überblicken kann ließe sich eine solche Spracherweiterung problemlos einbauen weil es rückwärtskompatibel wäre.

Was haltet ihr davon?

Grüße
Cody

sh17 10. Aug 2018 08:24

AW: Was würdet ihr von einem try-except-finally-Konstrukt halten?
 
Ja, so ein Konstrukt wäre sinnvoll,

aber warum nicht so?


Code:
  try
    myTransaction.StartTransaction;
    myDB.TuWas;
    myTransaction.Commit;
  except
    on E: EIrgendwas do myTransaction.Rollback;
  end;

Codehunter 10. Aug 2018 08:28

AW: Was würdet ihr von einem try-except-finally-Konstrukt halten?
 
Das war nur ein Pseudocode-Beispiel wie es in der Praxis oft vorkommt und sich viele was drunter vorstellen können. Anstatt der Transaction kann an sich auch irgend ein Object-Create-Free vorstellen.

mkinzler 10. Aug 2018 08:29

AW: Was würdet ihr von einem try-except-finally-Konstrukt halten?
 
Zitat:

Delphi-Quellcode:
try
  myTransaction.StartTransaction;
  myDB.TuWas;
except
  on E: EIrgendwas do myTransaction.Rollback;
finally
  myTransaction.Commit;
end;

ist meines Erachtens aber ein falsches Beispiel, den der Commit soll ja nicht auf jeden Fall getriggert werden.

Eher

Delphi-Quellcode:
try
  o := TKlasse.Create;
  TuWas;
except
  on E: EIrgendwas do FehlerBearbeitung;
finally
  o.Free;
end;

DeddyH 10. Aug 2018 08:50

AW: Was würdet ihr von einem try-except-finally-Konstrukt halten?
 
Oder noch eher:
Delphi-Quellcode:
o := TKlasse.Create;
try
  TuWas;
except
  on E: EIrgendwas do FehlerBearbeitung;
finally
  o.Free;
end;

Codehunter 10. Aug 2018 08:57

AW: Was würdet ihr von einem try-except-finally-Konstrukt halten?
 
Also Idee gut, Beispiel Mist?

DeddyH 10. Aug 2018 09:10

AW: Was würdet ihr von einem try-except-finally-Konstrukt halten?
 
Zu dieser Idee gibt es schon einige Threads, da müssten eigentlich sämtliche Pros und Contras erörtert worden sein.

mjustin 10. Aug 2018 09:17

AW: Was würdet ihr von einem try-except-finally-Konstrukt halten?
 
Die nächste Steigerungsstufe wäre dann:

Delphi-Quellcode:
// ...

    try (Obj := TMyClass.Create)
      // mach etwas mit dem Objekt
      ...
    except
      // behandele die Exception
      ...
    end;

// ...
Und das Free kann man sich sparen, weil der Compiler Code erzeugt, mit dem der Destruktor nach dem "End" aufgerufen wird.

8-)

Der schöne Günther 10. Aug 2018 09:35

AW: Was würdet ihr von einem try-except-finally-Konstrukt halten?
 
Als ich noch hauptsächlich in Java unterwegs war und dann zu Delphi kam war ich auch erstmal baff wie so etwas wie try..except..finally fehlen kann.

Ganz ehrlich: Ich vermisse es nicht im geringsten. Andere Dinge fehlen mir sehr viel mehr. Wenn man es denn wirklich einmal braucht ist ein try..(try..except)..finally allein durch die Einrückung schon übersichtlicher, finde ich.

Aviator 10. Aug 2018 09:37

AW: Was würdet ihr von einem try-except-finally-Konstrukt halten?
 
Ich finde die Idee gut und vermisse das auch in Delphi seit ich vor Jahren das erste Mal in C# damit in Kontakt getreten bin.


Zitat:

Zitat von mjustin (Beitrag 1410310)
Die nächste Steigerungsstufe wäre dann:

Delphi-Quellcode:
// ...

    try (Obj := TMyClass.Create)
      // mach etwas mit dem Objekt
      ...
    except
      // behandele die Exception
      ...
    end;

// ...
Und das Free kann man sich sparen, weil der Compiler Code erzeugt, mit dem der Destruktor nach dem "End" aufgerufen wird.

8-)

Also eine Art using Direktive wie es sie in C# gibt? Das wäre natürlich auch was feines.

Code:
using (HttpClient client)
{
    DoSomethingWithClient(client);
}


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:26 Uhr.
Seite 1 von 6  1 23     Letzte »    

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