![]() |
AW: Verständnisfrage zu Exit
Zitat:
Delphi-Quellcode:
zudem würde ich solche Verschachtelungen gar nicht verwenden sondern direkt mit Case arbeiten.
If Bedingung1 then
exit else if Bedingung2 then Mache2 else if Bedingung3 then Mach3 else ...
Delphi-Quellcode:
case Bedingung of
1: exit; 2: Mache2; 3: Mache3; else was auch immer end; |
AW: Verständnisfrage zu Exit
Zitat:
Zitat:
|
AW: Verständnisfrage zu Exit
Zitat:
Zitat:
Zitat:
|
AW: Verständnisfrage zu Exit
Juchu, lasst uns noch eine Diskussion um Goto und Goto-ähnliche Konstrukte führen! Das hatten wir schon lange nicht mehr. ;-)
Meine Meinung: Im Gegensatz zu Continue, Break und einem Goto, ist Exit ein relativ harmloses Konstrukt und hat definitiv seine Anwendung. Insbesondere verwende ich es gern, um am Anfang einer Methode die Eingangs-Voraussetzungen (Parameter, Zustand des Objekts) zu prüfen und die Methode dann zu verlassen, wenn es nichts zu tun gibt.
Delphi-Quellcode:
oder
procedure bla(const _s: string);
begin if _s = '' then begin // ein leerer String braucht nicht verarbetet zu werden. Exit; //==> end; // irgendwas längeres mit _s machen end;
Delphi-Quellcode:
Dieses "Early Return" wird durchaus häufig verwendet, ist aber nicht ganz umstritten.
procedure TSomeObject.SetVisibiel(_Value: boolean);
begin if _Value = FVisible then begin // keine Änderung -> raus Exit; //==> end; FVisible := _Value; // jetzt noch alles mögliche andere machen end; Dann gibt es noch eine andere praktische Verwendung von Exit: Das frühzeitige Verlassen von Schleifen:
Delphi-Quellcode:
Natürlich könnte man da auch Break verwenden, aber die Erfahrung hat mich gelehrt, dass ein Break gerne mal nicht die Schleife beendet, von der man denkt, dass sie beendet wird. Nachdem ich zum x-ten Mal irgendo eine geschachtelte Schleife eingebaut hatte und Break dann plötzlich nur noch diese innere Schleife verlasen hat, habe ich mir komplett abgweöhnt, es zu verwenden. Dito Continue.
function FindMatchingString(_sl: TStringList; const _s: string; out _Idx: Integer): boolean;
var i: Integer; begin for i := 0 to _sl.Count -1 do begin if StartsText(_s, _sl[i]) then begin _Idx := i; Result := True; Exit; //==> end; end; Result := False; end; Ach ja, und dann gibt es da immernoch das einzige Goto in unserer Codebase, das ich vor 13 Jahren eingebaut habe und jetzt schon aus Trotz drin lassen werde. ;-) |
AW: Verständnisfrage zu Exit
Zitat:
Dennoch finde ich GERADE hier Exit sau gefährlich! Da muss nur einer mal auf die Idee kommen, noch Code hinter die Schleife zu packen, der auf jeden Fall durchlaufen werden soll. Continue und Break haben sich bei mir bisher immer brav verhalten. Was unheimlich hilft dabei, ist es die Schleifenrümpfe brav alle in begin..end Blöcke zu verpacken, sodass der Scope immer eindeutig ist - auch optisch. |
AW: Verständnisfrage zu Exit
Zitat:
|
AW: Verständnisfrage zu Exit
Zitat:
Delphi-Quellcode:
procedure bla(const _s: string);
begin if _s <> '' then begin // irgendwas längeres mit _s machen end; end; |
AW: Verständnisfrage zu Exit
Zitat:
|
AW: Verständnisfrage zu Exit
Zitat:
|
AW: Verständnisfrage zu Exit
Warum das denn?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:21 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