AGB  ·  Datenschutz  ·  Impressum  







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

Verständnisfrage zu Exit

Ein Thema von kagi3624 · begonnen am 8. Okt 2020 · letzter Beitrag vom 12. Okt 2020
Antwort Antwort
Seite 1 von 2  1 2      
Der schöne Günther

Registriert seit: 6. Mär 2013
6.199 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AW: Verständnisfrage zu Exit

  Alt 8. Okt 2020, 13:51
Result in C++? Meinst du return ?

Wie auch immer, gegen deinen Code spricht nichts. Außer dass du auch stattdessen schreiben könntest Exit(1) .


Bei Deinem Beispiel ist das Exit schlicht überflüssig.
Wir wissen doch gar nicht ob seine Methode nur ein einziges if..else if.. else if... war oder ob da noch mehr kommt!
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.558 Beiträge
 
Delphi 7 Professional
 
#2

AW: Verständnisfrage zu Exit

  Alt 8. Okt 2020, 13:54
Naja, dann aber bitte so:
Delphi-Quellcode:
if A then Exit(1);
if B then...
Wenn ich schon mit Exit rausspringe, kann ich mir die nachfolgende Else sparen.
  Mit Zitat antworten Zitat
kagi3624

Registriert seit: 3. Feb 2020
138 Beiträge
 
Delphi 6 Enterprise
 
#3

AW: Verständnisfrage zu Exit

  Alt 8. Okt 2020, 13:57
Naja, dann aber bitte so:
Delphi-Quellcode:
if A then Exit(1);
if B then...
Wenn ich schon mit Exit rausspringe, kann ich mir die nachfolgende Else sparen.
Ja, genau so isses Es gibt aber auch fälle, wo man auch ohne der if Abfrage raus will. In einer Schleife z.B.

Geändert von kagi3624 ( 8. Okt 2020 um 13:59 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.355 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Verständnisfrage zu Exit

  Alt 8. Okt 2020, 14:05
Naja, dann aber bitte so:
Delphi-Quellcode:
if A then Exit(1);
if B then...
Wenn ich schon mit Exit rausspringe, kann ich mir die nachfolgende Else sparen.
Das war doch nur ein symbolischer Auszug und keine vollständige Methode...
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.558 Beiträge
 
Delphi 7 Professional
 
#5

AW: Verständnisfrage zu Exit

  Alt 8. Okt 2020, 14:11
Ja, aber hinter einem Exit in 'nem If then brauche ich keine Else. Die Alternative zu was soll denn da dann abgefragt werden, wenn die Alternative, zu der es ggfls. eine weitere geben könnte, bereits beschlossen hat, das hier ultimativ schluss iss?

@kagi3624
For-, Repeat, While-Schleifen kann man mit break verlassen.

Inhaltlich nicht sinnvoll, aber für's Prinzip geeignet
Delphi-Quellcode:
for i := 0 to MaxInt do begin
  if i > Trunc(Now) then begin
    Result := i div 42;
    break;
  end;
end;

Geändert von Delphi.Narium ( 8. Okt 2020 um 14:30 Uhr) Grund: Smilieeeefeehler
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
570 Beiträge
 
Delphi 12 Athens
 
#6

AW: Verständnisfrage zu Exit

  Alt 8. Okt 2020, 16:27
Wenn ich schon mit Exit rausspringe, kann ich mir die nachfolgende Else sparen.
Das sehe ich anders. Wenn ich einen (und womöglich längeren) Streifen mit else oder end else if habe, dann weiß ich sofort, dass nur einer dieser Blöcke ausgeführt wird. Bei deiner Notation springt dies nicht ins Auge, vielmehr erfährt man erst durch Auswerten, dass der nachfolgende Code nicht ausgeführt wird. Das empfinde ich als deutlich weniger intuitiv.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.558 Beiträge
 
Delphi 7 Professional
 
#7

AW: Verständnisfrage zu Exit

  Alt 8. Okt 2020, 17:11
Aber in der Situation ist das Exit nicht (zwingend) erforderlich, da die Routine ohne das Exit zum gleichen Ergebnis führen würde.

Schreibtechnisch wird also ein Result := 1 durch Exit(1) ersetzt.
Da finde ich die Zuweisung des Rückgabewertes an Result deutlich intuitiver als ein Exit, auch wenn es letztlich zum gleichen Ergebnis führt.

Exit nutze ich persönlich nur, wenn ich in 'ner Fehlersituation (also im Exceptblock eines Trys) aus 'ner Routine raus muss und damit sicherstellen will, das, egal, was später noch in 'ner Routine implementiert wurde, die Routine beendet wird.

Aber in 'ner If-else-if-Kasskade mit Exit auszusteigen, obwohl die Logik so implemtiert ist, dass das Exit nicht erforderlich ist, find' ich persönlich eher befremdlich.
Delphi-Quellcode:
function Test : Integer;
begin
  if a then begin
    Exit(1);
  end else
  if b then begin
    Exit(2);
  end else
...
  if z then begin
    Exit(26);
  end;
  // Jahre später wird in der Routine eine Änderung nötig, z. B. sowas:
  if (Result > 20) and (Result < 23) then begin
    // Mit Exit haben wir nun ein Problem, vor allem dann, wenn es nicht so offensichtlich ist, wie hier im Beispiel.
    // Mit der Nutzung von Result wäre es aber kein Problem.
  end;
end;
Und:

Wenn man Code nur intuitiv betrachtet und daraus Schlüsse zieht, kann man schonmal deutlich schiefliegen. Da ziehe ich die grundsätzliche Auswertung des Quelltextes doch vor.

Oder das ganze mal mit Case:
Delphi-Quellcode:
function Test(i : Integer) : Integer
begin
  case i of
    1 : Exit(1);
    2.. 10 : Exit(2);
   11..100 : Exit(3);
  else
    Exit(42);
  end;
end;
statt:
Delphi-Quellcode:
function Test(i : Integer) : Integer
begin
  case i of
    1 : Result := 1;
    2.. 10 : Result := 2;
   11..100 : Result := 3;
  else
    Result := 42;
  end;
end;
Geht beides, Variante 2 ist mir da aber deutlich lieber.
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
3.055 Beiträge
 
Delphi 12 Athens
 
#8

AW: Verständnisfrage zu Exit

  Alt 8. Okt 2020, 18:39
Result in C++? Meinst du return ?

Wie auch immer, gegen deinen Code spricht nichts. Außer dass du auch stattdessen schreiben könntest Exit(1) .
Aber nur, wenn er von seinem Delphi 6 auf was neueres umsteigt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Verständnisfrage zu Exit

  Alt 8. Okt 2020, 21:32
"Logisch" sind ELSE eigentlich passend,
auch wenn beim EXIT das ELSE unnötig wäre.

Wenn man aber mit ELSE und nur Result:= arbeitet, dann hat man z.B. die Chance ans Ende "einen" Haltepunkt zu setzen oder eine Loggingfunktion dort einzufügen, was bei den Exits (zentral) nicht ginge.


Was ich heute in der Hilfe vom VBScript sah .... im Delphi braucht man zum Glück nicht mehr Funktionsname := ...; und kann fehlerunanfäliger mit Result arbeiten. (sogar lesend)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 8. Okt 2020 um 21:35 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

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

AW: Verständnisfrage zu Exit

  Alt 8. Okt 2020, 23:01
Wenn man aber mit ELSE und nur Result:= arbeitet, dann hat man z.B. die Chance ans Ende "einen" Haltepunkt zu setzen oder eine Loggingfunktion dort einzufügen, was bei den Exits (zentral) nicht ginge.
Das Exit springt aber doch an das end der Function. Dort kannst du doch den Haltepunkt setzen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 10:23 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