AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Schleifenabbruch durch exception verhindern

Ein Thema von bernhard_LA · begonnen am 22. Jan 2015 · letzter Beitrag vom 22. Jan 2015
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von himitsu
himitsu

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

AW: Schleifenabbruch durch exception verhindern

  Alt 22. Jan 2015, 18:06
Finally wird immer verarbeitet und wenn man zwischen Finally und End eine aktuell eventuell vorhandene Exception verwirft, dann hätte man auch jetzt schon sein Try-Finally&Except.
Wenn man nur prüfen will, ob eine Exception auftrat, um diese eventuell zu loggen, aber nicht um sie zu behandeln, dann reicht ebenfalls ein Try-Finally und ein 22-buchstabiger Befehl.

Aber ja, um 2-3 Zeilen und eine Ebene in der Einrückung zu sparen, wäre ein Try-Finally-Except-End, bzw. Try-Except-Finally-End bestimmt ganz nett.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (22. Jan 2015 um 18:09 Uhr)
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#12

AW: Schleifenabbruch durch exception verhindern

  Alt 22. Jan 2015, 18:18
Aber ja, um 2-3 Zeilen und eine Ebene in der Einrückung zu sparen, wäre ein Try-Finally-Except-End, bzw. Try-Except-Finally-End bestimmt ganz nett.
Dann aber auch noch gleich ein echtes ELSEIF, welches ich persönlich sehr vermisse.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#13

AW: Schleifenabbruch durch exception verhindern

  Alt 22. Jan 2015, 18:43
Das try ... except ... finally ... end ist doch nur was für Leute mit Exception-Phobie
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Schleifenabbruch durch exception verhindern

  Alt 22. Jan 2015, 19:41
Dann aber auch noch gleich ein echtes ELSEIF, welches ich persönlich sehr vermisse.
Du mein ein CASE-OF?

Ja, ein CASE für nicht-ordinale Typen wäre bestimmt auch nett.
Und dann noch nicht-konstante Werte im CASE.

Das ist ja nicht so ganz der Renner:
Delphi-Quellcode:
case IndexStr(S, ['aaa', 'bbb', 'ccc']) of
  0{aaa}: ...;
  1{ddd}: ...;
  2{ccc}: ...;
end;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#15

AW: Schleifenabbruch durch exception verhindern

  Alt 22. Jan 2015, 19:58
Also ein case mit variablen oder nicht ordinalen Werten wäre zwar charmant, aber zu welchem Preis?

Einige Fehler finde ich erst zur Laufzeit (z.B. ein Wert ist doppelt vorhanden). Da macht es schon eher Sinn sich einen solchen Case als Klasse mit Closures/Methoden zusammenzubauen. Man benötigt eine Factory-Klasse was daraus ein Closure baut.

Delphi-Quellcode:
var MyCase : TProc<string>;

MyCase := TCaseFactory<string>
  .Case( 'foo', procedure begin ShowMessage( 'Moin' ); end )
  .Case( 'bar', procedure begin Application.MainForm.Close; end )
  .Else( procedure begin end )
  .Build;

MyCase( 'bar' );
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#16

AW: Schleifenabbruch durch exception verhindern

  Alt 22. Jan 2015, 20:09
Dann aber auch noch gleich ein echtes ELSEIF, welches ich persönlich sehr vermisse.
Du mein ein CASE-OF?
Nein, eigentlich nicht, sondern ein IF-ELSEIF-ELSE.

Delphi-Quellcode:
if (Bedingung1) then
 begin
  ...
 end
elseif (Bedingung2) then
 begin
  ...
 end
elseif (Bedingung3) then
 begin
  ...
 end
else
 begin
  ...
 end;
Als bekennender "Begin-End"- und Einrückungsfetischist sieht das nämlich immer so aus:

Delphi-Quellcode:

if (Bedingung1) then
 begin
  ...
 end
else
 begin
  if (Bedingung2) then
   begin
    ...
   end
  else
   begin
    if (Bedingung3) then
     begin
      ...
     end
    else
     begin
      ...
     end;
   end;
 end;
Und jetzt stell Dir vor Du musst 10-15 Bedingungen prüfen.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#17

AW: Schleifenabbruch durch exception verhindern

  Alt 22. Jan 2015, 20:17
Lustig, das Niemand was an diesem 1000 Zeilen Monstrum auszusetzen hat.

Mein Tipp wäre: Anstatt den Fehler fürs Erste zu ignorieren, und für 'try...finally...except..end' (oder umgekehrt) zu voten, oder mit anderen Nice-To-Have-Features zu liebäugeln, würde ich mal das Refaktoring-Beil herauskramen.

Deine Klasse ist zu komplex und das hast du nun davon.

Delegiere Teile der Funktionen deiner Klasse in andere (neue) Klassen.
Gruppiere Methoden in deiner Riesenklasse, die gemeinsame private Variablen verwenden und lagere sie aus.
Wenn eine Methode viele andere Methoden aufruft, wäre das auch ein Kandidat für eine eigene Klasse.

Dabei räumst Du auf und vielleicht findest Du den Fehler dann. Wenn nicht, dann prüfe einfach die einzelnen Methoden und schreibe Unittests.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Schleifenabbruch durch exception verhindern

  Alt 22. Jan 2015, 20:28
Über die 1000 Zeilen hatte man sich bereits auf Seite 1 aufgeregt.

Als bekennender "Keine unnötigen Klammern oder Begin-End und Bedin-End in selber Zeile"-Fetischist kann ich das Problem nicht erkennen.
Delphi-Quellcode:
if Bedingung1 then
  ...
else if Bedingung2 then
  ...
else if Bedingung3 then
  ...
else
  ...;

if Bedingung1 then begin
  ...
end else begin
  ...
end;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#19

AW: Schleifenabbruch durch exception verhindern

  Alt 22. Jan 2015, 20:28
Lustig, das Niemand was an diesem 1000 Zeilen Monstrum auszusetzen hat.
Natürlich wäre das der korrekte Ansatz. Allerdings steht ausdrücklich im ersten Post:

Technisch bekomme ich dieses Problem nicht schnell gelöst.
Ich gehe also davon aus, daß dieser (obwohl bessere) Weg hier aus Zeitgründen nicht eingeschlagen werden kann oder soll.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#20

AW: Schleifenabbruch durch exception verhindern

  Alt 22. Jan 2015, 21:59
Ich glaube, das man hier vor lauter Wald den Baum nicht sieht. Bugs in so einem Klassenmonstrum kann man i.A. "technisch nicht schnell" lösen.

Da ich aber auch darauf poche, den Eingangspost zu lesen und den TE ernst zu nehmen, muss das akzeptieren. Danke für den Hinweis.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 05:13 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