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
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.309 Beiträge
 
Delphi 12 Athens
 
#1

AW: Verständnisfrage zu Exit

  Alt 10. Okt 2020, 17:47
Dementsprechend wäre für die Funktionen Folgendes sinnvoll:
Delphi-Quellcode:
Result := KlapptDas1;
Result := Result and KlapptDas2;
Result := Result and KlapptDas3;
Result := Result and KlapptDas4;
If Result then begin
 ... // jetzt kann es losgehen
Grade das ist doch prädistiniert für ein Exit;

Delphi-Quellcode:
if not KlapptDas1 then
  Exit;
if not KlapptDas2 then
  Exit;
if not KlapptDas3 then
  Exit;
if not KlapptDas4 then
  Exit;
 ... // jetzt kann es losgehen
Breakpoint auf alle Exit und du springst sofort auf den betreffenden Exit ohne mit F8 durch zappen zu müssen.

Immer wenn ich irgendwo beim Refactoring bin, versuche ich immer Vorabbedingunge in ein Exit hineinzuverfrachten.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Verständnisfrage zu Exit

  Alt 10. Okt 2020, 21:19

Grade das ist doch prädistiniert für ein Exit;

Delphi-Quellcode:
if not KlapptDas1 then
  Exit;
if not KlapptDas2 then
  Exit;
if not KlapptDas3 then
  Exit;
if not KlapptDas4 then
  Exit;
 ... // jetzt kann es losgehen
Breakpoint auf alle Exit und du springst sofort auf den betreffenden Exit ohne mit F8 durch zappen zu müssen.
Auf eine Zeile mit einem simplen Exit kannst du aber keinen Breakpoint setzen. Nur wenn mit dem Exit ein Result zurückgegeben wird geht das.
Delphi-Quellcode:
if not KlapptDas1 then
  Exit(False);
if not KlapptDas2 then
  Exit(False);
if not KlapptDas3 then
  Exit(False);
if not KlapptDas4 then
  Exit(False);
 ... // jetzt kann es losgehen
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.309 Beiträge
 
Delphi 12 Athens
 
#3

AW: Verständnisfrage zu Exit

  Alt 10. Okt 2020, 21:31
Auf eine Zeile mit einem simplen Exit kannst du aber keinen Breakpoint setzen. Nur wenn mit dem Exit ein Result zurückgegeben wird geht das.
Ähm. ja. Stimmt.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benmik

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

AW: Verständnisfrage zu Exit

  Alt 10. Okt 2020, 23:18
Spielverderber! Trotzdem guter Tipp für mich: Das exit(False) ist die Regel und notfalls schreibe ich es hin, auch wenn am Anfang der Routine Result := False; steht. Kann man ja wieder wegmachen, wenn das Debugging vorbei ist.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Verständnisfrage zu Exit

  Alt 11. Okt 2020, 00:05
Kann man ja wieder wegmachen, wenn das Debugging vorbei ist.
Ähhh neee?
Dann verhält sich dein Programm ja beim Debuggen womöglich anders, als in echt, was schon ein bissl sinnlos wäre.

Und natürlich geht es nur, wenn es eine Funktion und keine Prozedur ist. Und natürlich auch nur mit Boolean als Result.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (11. Okt 2020 um 11:20 Uhr)
  Mit Zitat antworten Zitat
Benmik

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

AW: Verständnisfrage zu Exit

  Alt 11. Okt 2020, 00:39
Nein, ich meinte doch Folgendes:
Delphi-Quellcode:
Function LeseJPGEin(DatnameMV:string):Boolean;
begin
  Result := False;
  If not DateiVorhanden
    then exit(False);
  If not HeaderOK
    then exit(False);
  If not EndianOK
    then exit(False):
  ....
Das "False" wäre ja nicht nötig, kann man zum Debuggen rein und hinterher wieder rausmachen.
(Oder man geht nach Hagen und macht das "Result := False" erst gar nicht hin, aber ich bin da gern auf der sicheren Seite.)
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.309 Beiträge
 
Delphi 12 Athens
 
#7

AW: Verständnisfrage zu Exit

  Alt 11. Okt 2020, 08:08
Nein, ich meinte doch Folgendes:
Delphi-Quellcode:
Function LeseJPGEin(DatnameMV:string):Boolean;
begin
  Result := False;
  If not DateiVorhanden
    then exit(False);
  If not HeaderOK
    then exit(False);
  If not EndianOK
    then exit(False):
  ....
Das "False" wäre ja nicht nötig, kann man zum Debuggen rein und hinterher wieder rausmachen.
(Oder man geht nach Hagen und macht das "Result := False" erst gar nicht hin, aber ich bin da gern auf der sicheren Seite.)
In vielen Fällen spricht erst mal ja nichts dagegen, aus einer Procedure eine Function zu machen.

Das Result := False; kann man nach hinten verschieben.

Delphi-Quellcode:
Function LeseJPGEin(DatnameMV:string):Boolean;
begin
  If not DateiVorhanden
    then exit(False);
  If not HeaderOK
    then exit(False);
  If not EndianOK
    then exit(False):
  Result := True;
  ....
Grade dein Procedurename/Funktionsname ist für ein Result geeignet. Laden des Jpeg hat funktioniert oder eben nicht.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.309 Beiträge
 
Delphi 12 Athens
 
#8

AW: Verständnisfrage zu Exit

  Alt 11. Okt 2020, 08:09
Und natürlich geht es nur, wenn es eine Funktion und keine Prozedur ist. Und natürlich auch nur mit Boolean als Result. :stupit:
Warum nur mit Boolean als Result?
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Verständnisfrage zu Exit

  Alt 11. Okt 2020, 11:18
Weil das Exit(False) sonst knallt?

Und ja, diese Exit sind hier schon bissl blöd.
Es ist toll, wenn die Prozedur nicht nur Exit macht, sondern wenigstens noch Funktion noch ein False sagt,

aber erstmal wird oft genug vergessen das Result von Funktionen auszuwerten
und dann macht es die Fehlerbehandung und auch Fehlersuche extrem spannend, wenn man nicht weiß warum die Funktion nichts machte.



Exceptions sind schon was Tolles, das auch gute Infos geben könnte.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (11. Okt 2020 um 11:22 Uhr)
  Mit Zitat antworten Zitat
Benmik

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

AW: Verständnisfrage zu Exit

  Alt 11. Okt 2020, 14:44
Warum nur mit Boolean als Result?
Es ist vielleicht nur ein vorübergehender Zustand und auch der EXIFerei geschuldet, aber ich habe angefangen, praktisch alle Prozeduren in boolesche Funktionen umzuwandeln, bei denen der Wert per var übergeben wird.
Erstens kann man dadurch mehr als einen Wert übergeben, und zweitens finde ich den Aufruf
Delphi-Quellcode:
If BestimmeHeaderPos(HeaderPos) then begin
  MachWasMitHeaderPos;
viel praktischer als
Delphi-Quellcode:
HeaderPos := BestimmeHeaderPos;
If HeaderPos > 0 then begin
  MachWasMitHeaderPos;
  Mit Zitat antworten Zitat
Antwort Antwort


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 08: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