![]() |
AW: "FinalllyExit" gewünscht
Zitat:
Dieser Schwachfug ist in Zeiten aufgekommen, als auffiel, das ein GOTO etwas furchtbar Böses ist und ein EXIT (und BREAK) ja eigentlich auch irgendwie ein GOTO bzw. ein Sprung. Und vor lauter Verteufeln hatte man doch glatt vergessen, das das soooo elegante Exceptionhandling nichts Anderes ist, als ein objektorientiertes SetJmp/LongJmp und damit eigentlich auch zu verteufeln wäre. Aber gut: Vertreter der Gattung "EXIT's sind schlechter Codestil" behaupten das ja grundsätzlich und sind daher nicht in der Lage, dies grundsätzlich zu belegen. Zitat:
|
AW: "FinalllyExit" gewünscht
Zitat:
|
AW: "FinalllyExit" gewünscht
Zitat:
Man kann Exit, Goto, With etc. so einsetzen, dass es übersichtlicher wird. Aber man kann mit den genannten Anweisungen auch Chaos in den Code bringen. Deshalb wird wohl davon abgeraten, zumal es fast immer eine Alternative gibt. Ich kenne wenig Delphi-Code, wo Exit ungünstig eingesetzt wird und ich deshalb rätseln musste wie eine Funktion arbeitet. Als ich mit C# angefangen hatte, hat mich das inflationär eingesetzte return oft viel Zeit gekostet. Bei Delphi bn ich doch immer wieder froh, dass man von Haus aus etwas strengere Regeln anlegt (auch wenn es manchmal etwas übertrieben sein mag) |
AW: "FinalllyExit" gewünscht
Zitat:
Meine Meinung zu dem Thema ist folgende (die darf ich ja noch haben und auch kund tun, oder? vielen Dank): Da in Delphi das Statement
Delphi-Quellcode:
nunmal nicht so wie in anderen Sprachen
Result := xyz;
Delphi-Quellcode:
das direkte Verlassen der Routine zur Folge hat und danach weitergarbeitet wird/werden kann, hat man mit dem Benutzen von Exit 2 verschiedene Verhaltensweisen: die "herkömmliche" (Abarbeiten der Routine bis zum Ende) und das direkte Verlassen (mit oder ohne Rückgabewert). Benutze ich die herkömmliche Weise, kann ich sicher sein, dass sich alles immernoch genauso verhält, wenn ich weiteren Code hinzufüge (z.B. Objekt freigeben, Logging Eintrag, etc). Das ist bei einem Exit nicht so. Es verändert den gewohnten Ablauf (im Sinne von 1 Eingang und 1 Ausgang), indem es einen weiteren Ausgang aus der Routine schafft.
return xyz
Ja, richtig, hier prallen wieder mal die unterschiedlichen Ansichtsweisen, was sauberer Code ist und was nicht, aufeinander. Ich stehe nach wie vor zu meiner Meinung und ich werde auch an irgendeiner Stelle wo es "nötig ist", von den 0.01% der Fälle Gebrauch machen und ein Exit einsetzen. Aber in keinem der hier im Thread erwähnten Fälle. |
AW: "FinalllyExit" gewünscht
Break und Exit haben nunmal ihre Berechtigung und auch ich nutze sie sehr oft.
Genauso wie das super GOTO wird manchmal verwendet. (ich wünsche mir auch noch ein GOSUB) Ja, wenn man ganz pervers ist, dann verwendet man auch noch Exceptions, zur Steuerung des Programmablaufs. Und Timer, sowie ProcessMessages für langanhaltende Programmteile, anstatt von Threads. So, jetzt dürft ihr mich steinigen. ich steh dazu, daß ich Exit und auch manchmal Goto verwende, vorallem wenn sich dadurch der Programmablauf vereinfachen oder übersichtlicher gestalten läßt. |
AW: "FinalllyExit" gewünscht
Pass auf, dass du nicht gesteinigt wirst. Du läufst hier die Gefahr...
Du hast es ja eh selbst schon befürchtet xD |
AW: "FinalllyExit" gewünscht
Wenn man Exit richtig einsetzt erhöht das die Lesbarkeit; wenn man es falsch einsetzt verringert man die Lesbarkeit.
Es geht also nicht um die Anzahl der Zeilen oder Optik sondern um die Lesbarkeit. Nach meiner Erfahrung gilt es dabei zu beachten: 1.) wenn man Exit verwendet, dann möglichst frühzeitig aussteigen
Delphi-Quellcode:
2.) Exit nicht verwenden, wenn man gezwungen wäre Anweisungen zu wiederholen
procedure GoodExample1(arg1,arg2,..);
begin if arg1 = arg2 then Exit; // hier folgen einige weitere Anweisungen Anweisung1; ... AnweisungN; end;
Delphi-Quellcode:
3.) Exit nur einmal verwenden
procedure BadExample2(arg1,arg2,..);
begin Machwas; if (IrgendeineBedingung) then begin MachNochIrgendwas; // doppelter Code Exit; end; // hier folgen einige weitere Anweisungen ..... MachNochIrgendwas; // doppelter Code end; Wenn man an mehreren Stellen eine Funktion/Procedure mit Exit verlässt, dann verschlechtert dies die Lesbarkeit. 4.) Exit aus einer Schleife Hier zeigt sich ganz klar der Vorteil von Exit; man kann eine Schleife und zugleich die Funktion/Procedure verlassen, ohne dass der der Schleife folgende Code ausgeführt wird. Man spart sich so die Verwendung eines boolean Flags. 5.) Exit in "Kleinfunktionen" Manchmal wird Exit verwendet, ohne wirklich eine Verbesserung der Lesbarkeit zu bringen. Das zeigt sich z.B. in Funktionen mit nur ganz wenigen Anweisungen
Delphi-Quellcode:
Dies lässt sich so umschreiben (und man spart sogar eine Zeile):
function BadExample2(arg..):Boolean;
begin result := False; if EineBedingung then Exit; // sehr unschön EineEinzigeWeitereAnweisung; Result := True; end;
Delphi-Quellcode:
Mit diesem Kochbuch kann eigentlich in Bezug auf Exit nichts mehr schiefgehen.
function GoodExample2(arg..):Boolean;
begin result := not EineBedingung; // anstatt "not" besser die Bedingung umformulieren if Result then EineEinzigeWeitereAnweisung; end; So und nun habt euch wieder lieb!! |
AW: "FinalllyExit" gewünscht
Zitat:
Das: Zitat:
Zitat:
Sicher gibt es auch genau so gute Beispiele wie man seinen Code mit Exits und Breaks verhunzen kann. Es kommt eben immer auf das richtige Maß an. Alles mit Scheuklappen auf eine vorgebene Weise zu machen ist übrigens auch ein Anti-Pattern: Zitat:
|
AW: "FinalllyExit" gewünscht
Zitat:
Dazu sag ich dann nur: Zitat:
|
AW: "FinalllyExit" gewünscht
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:07 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