AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Verständnisfrage zu Exit

Ein Thema von kagi3624 · begonnen am 8. Okt 2020 · letzter Beitrag vom 12. Okt 2020
Antwort Antwort
Seite 3 von 8     123 45     Letzte » 
venice2
(Gast)

n/a Beiträge
 
#21

AW: Verständnisfrage zu Exit

  Alt 9. Okt 2020, 03:33
Zitat:
Jetzt habe ich mich ein bisschen ereifert, da bitte ich um Nachsicht.
Kein Problem nur warum überhaupt ein "begin"

Delphi-Quellcode:
If Bedingung1 then
  exit
else if Bedingung2 then
  Mache2
else if Bedingung3 then
  Mach3
else
...
zudem würde ich solche Verschachtelungen gar nicht verwenden sondern direkt mit Case arbeiten.

Delphi-Quellcode:
case Bedingung of
  1:
    exit;
  2:
    Mache2;
  3:
    Mache3;
  else
    was auch immer
end;

Geändert von venice2 ( 9. Okt 2020 um 03:40 Uhr)
  Mit Zitat antworten Zitat
HeZa

Registriert seit: 4. Nov 2004
Ort: Dortmund
182 Beiträge
 
Delphi 10 Seattle Professional
 
#22

AW: Verständnisfrage zu Exit

  Alt 9. Okt 2020, 07:47
Kein Problem nur warum überhaupt ein "begin"
Da bin ich bei dir. Zur Not könnte man den Code aus den begin-end Blöcken in kleine lokale Proceduren/Funktionen packen.
zudem würde ich solche Verschachtelungen gar nicht verwenden sondern direkt mit Case arbeiten.
Da es unterschiedliche Bedingungen sein könnten, ist ein case nicht immer möglich.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#23

AW: Verständnisfrage zu Exit

  Alt 9. Okt 2020, 07:55
Zitat:
Ich finde die Methode 2 weder böses GoTo noch Spaghetticode oder sonstwas, sondern nur eins: Sehr übersichtlich.
Ich bevorzuge eher begin und end auf selber (Einrückungs-)Ebene.

Zitat:
Kein Problem nur warum überhaupt ein "begin"
Damit man es nicht später vergisst. (wenn dann die Sequenz erweitert wird)
Zitat:
Zur Not könnte man den Code aus den begin-end Blöcken in kleine lokale Proceduren/Funktionen packen.
Warum nur zur Not? Hängt eher vom Unfang/Länge der Sequenz( Block) ab und ob er vielleicht wo anders noch benötigt wird.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.449 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#24

AW: Verständnisfrage zu Exit

  Alt 9. Okt 2020, 09:50
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:
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;
oder
Delphi-Quellcode:
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;
Dieses "Early Return" wird durchaus häufig verwendet, ist aber nicht ganz umstritten.

Dann gibt es noch eine andere praktische Verwendung von Exit: Das frühzeitige Verlassen von Schleifen:
Delphi-Quellcode:
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;
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.

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.
Thomas Mueller

Geändert von dummzeuch ( 9. Okt 2020 um 09:53 Uhr)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#25

AW: Verständnisfrage zu Exit

  Alt 9. Okt 2020, 10:03
Delphi-Quellcode:
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;
Da sollte dir der Compiler um die Ohren hauen, dass das Funktionsergebnis undefiniert sein kann. Setze das Result := false; an den Anfang der Funktion, und sie ist okay.

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.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Verständnisfrage zu Exit

  Alt 9. Okt 2020, 11:02
Da sollte dir der Compiler um die Ohren hauen, dass das Funktionsergebnis undefiniert sein kann.
Wieso? Ich sehe da keinen möglichen Code-Path, der die Funktion ohne Setzen von Result verlässt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
664 Beiträge
 
Delphi 12 Athens
 
#27

AW: Verständnisfrage zu Exit

  Alt 9. Okt 2020, 11:02
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:
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;
Genau für diesen Fall verwende ich Exit auch ganz gerne. Auch weil es eine Einrückungsebene spart. Die Alternative wäre ja:

Delphi-Quellcode:
procedure bla(const _s: string);
begin
  if _s <> 'then begin
    // irgendwas längeres mit _s machen
  end;
end;
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#28

AW: Verständnisfrage zu Exit

  Alt 9. Okt 2020, 11:07
Da sollte dir der Compiler um die Ohren hauen, dass das Funktionsergebnis undefiniert sein kann.
Wieso? Ich sehe da keinen möglichen Code-Path, der die Funktion ohne Setzen von Result verlässt.
Oh, du hast Recht. Vor dem Exit MUSS ja result := true passieren. Mea culpa. Dennoch finde ich es unschön in diesem Fall.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
DasWolf

Registriert seit: 7. Jun 2016
75 Beiträge
 
Delphi 10.1 Berlin Professional
 
#29

AW: Verständnisfrage zu Exit

  Alt 9. Okt 2020, 11:16
Setze das Result := false; an den Anfang der Funktion, und sie ist okay.
Nein, Nein, Nein und nochmal Nein. Das Result wird nicht am Anfang belegt.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#30

AW: Verständnisfrage zu Exit

  Alt 9. Okt 2020, 11:22
Warum das denn?
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 02:22 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