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 6 von 8   « Erste     456 78   
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.732 Beiträge
 
Delphi 10.4 Sydney
 
#51

AW: Verständnisfrage zu Exit

  Alt 11. Okt 2020, 01: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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

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

Registriert seit: 11. Apr 2009
445 Beiträge
 
Delphi 10.4 Sydney
 
#52

AW: Verständnisfrage zu Exit

  Alt 11. Okt 2020, 01: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.193 Beiträge
 
Delphi 10.3 Rio
 
#53

AW: Verständnisfrage zu Exit

  Alt 11. Okt 2020, 09: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.193 Beiträge
 
Delphi 10.3 Rio
 
#54

AW: Verständnisfrage zu Exit

  Alt 11. Okt 2020, 09: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
38.732 Beiträge
 
Delphi 10.4 Sydney
 
#55

AW: Verständnisfrage zu Exit

  Alt 11. Okt 2020, 12: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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

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

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.578 Beiträge
 
#56

AW: Verständnisfrage zu Exit

  Alt 11. Okt 2020, 15:00
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.
Da gefällt mir übrigens sehr der Ansatz von Rust (ohne, dass ich das bisher selbst probiert habe): Die Funktion gibt einen Result-Typen zurück, und man muss prüfen ob es ein SuccessResult ist, bevor man an den Wert dran kommt. (https://doc.rust-lang.org/stable/rus...or/result.html)
Bzw. Im Regelfall nimmt man das Result einer Funktion und hängt einfach eine Operation an den Erfolg an. Allso ein automatisches
Delphi-Quellcode:
res := strtoint(text)
if res.Success then
  Result := TResult.Create(Success, res.Value * 2)
else
  Result := res
Dürfte in Delphi aber kniffelig umzusetzen sein, weil es als varianter record immer den Zugriff auf den Erfolg zulässt und/oder (als Klassenhierarchie) den Aufrufer mit der Speicherfreigabe "beglückt".
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
445 Beiträge
 
Delphi 10.4 Sydney
 
#57

AW: Verständnisfrage zu Exit

  Alt 11. Okt 2020, 15: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
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.732 Beiträge
 
Delphi 10.4 Sydney
 
#58

AW: Verständnisfrage zu Exit

  Alt 11. Okt 2020, 15:45
Die Funktion gibt einen Result-Typen zurück, und man muss prüfen
Ich war mir sicher, dass es im Delphi/Pascal auch einen Compilerschalter gab, wo der Compiler einen Fehler oder eine Warnung warf, wenn das Result einer Funktion nicht ausgewertet wird. (nicht in einem IF, an eine Variable zugewiesen oder als Parameter genutzt)

Aber ich find grade nicht.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
8.819 Beiträge
 
Delphi 10.4 Sydney
 
#59

AW: Verständnisfrage zu Exit

  Alt 11. Okt 2020, 16:01
Ich war mir sicher, dass es im Delphi/Pascal auch einen Compilerschalter gab, wo der Compiler einen Fehler oder eine Warnung warf, wenn das Result einer Funktion nicht ausgewertet wird.
Das ist Teil des Compiler-Schalters $X (Erweiterte Syntax):
Zitat:
Dient nur der Abwärtskompatibilität. Verwenden Sie diese Option (entspricht {$X-}) nicht in Ihren Delphi-Anwendungen. Mit dieser Option wird die erweiterte Syntax von Delphi aktiviert oder deaktiviert:

Funktionsanweisungen. Im Modus {$X+} können Funktionsaufrufe als Prozedurenaufrufe verwendet werden, d. h. das Ergebnis eines Funktionsaufrufs kann ignoriert werden, anstatt an eine andere Funktion übergeben oder in einer Operation bzw. Zuweisung verwendet zu werden. Im Allgemeinen werden die von einer Funktion ausgeführten Berechnungen durch das Funktionsergebnis repräsentiert, das nicht ignoriert werden sollte. Manchmal führen Funktionen aber lediglich eine bestimmte Operation durch (z. B. einer globalen Variablen einen Wert zuweisen) und geben keinen Wert zurück, der weiterverwendet werden kann.

Result-Variable. Wenn die Option aktiviert ist (entspricht {$X+}), kann die vordefinierte Result-Variable für den Rückgabewert der Funktion verwendet werden.

Nullterminierte Strings. Wenn diese Option aktiviert ist, können Delphi-Strings nullbasierten Zeichen-Arrays (array[0..X] of Char) zugewiesen werden, die mit PChar-Typen kompatibel sind.
Leider ist bei $X- auch die Verwendung von Result anstatt des Funktionsnamen für den Rückgabewert nicht mehr möglich. Das wird aber aktuell soviel verwendet, dass vermutlich kaum ein Programm noch mit $X- compileren würde.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
3.842 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#60

AW: Verständnisfrage zu Exit

  Alt 11. Okt 2020, 23:12
Da gefällt mir übrigens sehr der Ansatz von Rust (ohne, dass ich das bisher selbst probiert habe): Die Funktion gibt einen Result-Typen zurück, und man muss prüfen ob es ein SuccessResult ist, bevor man an den Wert dran kommt.
Puh, das driftet jetzt aber sehr ab - Result<T,E> in Rust ist aus der funktionalen Programmierung, um die Abwesenheit eines Wertes (in anderen Sprachen oft mit einem Nullable<T> modelliert), oder einen Fehler ohne Exception raising darzustellen, womit man sehr gut pure Funktionen aneinanderketten kann. Siehe auch die Präsentation "Railway Oriented Programming" von Scott Wlaschin.

Ich hab über diese Thematik übrigens auch schon gebloggt:
https://delphisorcery.blogspot.com/2...nil-maybe.html
https://delphisorcery.blogspot.com/2...or-delphi.html

Kommt jetzt aber arg vom Thema "Exit oder nicht" ab
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (11. Okt 2020 um 23:15 Uhr)
  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 07:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf