AGB  ·  Datenschutz  ·  Impressum  







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

eigene Fehlercodes als Rückgabewert definieren

Ein Thema von Gargamel · begonnen am 5. Jul 2011 · letzter Beitrag vom 14. Jul 2011
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.667 Beiträge
 
Delphi 12 Athens
 
#1

AW: eigene Fehlercodes als Rückgabewert definieren

  Alt 5. Jul 2011, 15:20
Wieso programmierst Du nicht so etwas wie GetLastError nach? Du deklarierst Deinen Record einfach als Feld von TSchnulli und befüllst ihn im Fehlerfall dort. Willst Du ihn auswerten, kannst Du das dann an zentraler Stelle tun.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#2

AW: eigene Fehlercodes als Rückgabewert definieren

  Alt 5. Jul 2011, 16:03
Und wieso nicht einfach mit Exceptions arbeiten? Fehlercodes sind doch Schrott.

Geändert von Iwo Asnet ( 5. Jul 2011 um 16:04 Uhr) Grund: Recktschraipungsfela
  Mit Zitat antworten Zitat
Gargamel

Registriert seit: 19. Mär 2007
171 Beiträge
 
#3

AW: eigene Fehlercodes als Rückgabewert definieren

  Alt 5. Jul 2011, 16:33
Zitat:
Wieso programmierst Du nicht so etwas wie GetLastError nach? Du deklarierst Deinen Record einfach als Feld von TSchnulli und befüllst ihn im Fehlerfall dort. Willst Du ihn auswerten, kannst Du das dann an zentraler Stelle tun.
Weil ich einige Funktionen u.U. via Multithreading laufen lassen will und ich mir nicht sicher bin, ob es da u.U. Überschneidungen gibt. (GetLastError).

Zitat:
Und wieso nicht einfach mit Exceptions arbeiten? Fehlercodes sind doch Schrott.
Ich finde ErrorCodes ganz nett.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

AW: eigene Fehlercodes als Rückgabewert definieren

  Alt 5. Jul 2011, 16:54
Ich finde ErrorCodes ganz nett.
Das sagst du nur, weil du das Prinzip der Exceptions nicht in voller Tiefe verstanden hast.
*ALLE* modernen Programmiersprachen setzen auf Exceptions weil es einfach der bessere Weg ist mit Fehlern zur Laufzeit umzugehen.

Delphi Kurs - Exceptions
Exceptions Tutorial
Andreas
  Mit Zitat antworten Zitat
FredlFesl

Registriert seit: 19. Apr 2011
293 Beiträge
 
Delphi 2009 Enterprise
 
#5

AW: eigene Fehlercodes als Rückgabewert definieren

  Alt 5. Jul 2011, 17:21
Beispiel 1:
Delphi-Quellcode:
Prozedur1(xy,ErrorCode);
if ErrorCode = Prozedur1WarOK then begin
  Prozedur2(xy,ErrorCode);
  if ErrorCode = Prozedur2WarOK then begin
    Prozedur3(xy,ErrorCode);
    if ErrorCode = Prozedur3WarOK then
       ShowMessage('Funzt')
    else
       Fehlerbehandlung(ErrorCode);
    end
  else
    Fehlerbehandlung(ErrorCode);
end
else
  Fehlerbehandlung(ErrorCode);
Beispiel 2:
Delphi-Quellcode:
Try
  Prozedur1(xy);
  Prozedur2(xy);
  Prozedur3(xy);
  ShowMessage('Funzt')
Except
  On E:Exception Do
    Fehlerbehandlung(E);
End;
1. Welcher Code ist übersichtlicher?
2. Welcher Code ist leichter zu verändern?
3. Welcher Code ist verständlicher?
Das Bild hängt schief.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

AW: eigene Fehlercodes als Rückgabewert definieren

  Alt 5. Jul 2011, 17:37
@Gargamel:
An sich ist es schon richtig wie du es machst. Allerdings ist es unüblich den Fehlercode über var/out Parameter zurück zu liefern und das Ergebnis per result.
In der Regel wird es genau umgekehrt gemacht. Denn was soll die Funktion zurück geben wenn ein Fehler aufgetreten ist?
Zudem lässt sich bei Fehlercodes per Result einiges etwas kürzer schreiben:
Delphi-Quellcode:
if FunktionsAufruf(Ergebnis) = RES_SUCCESS then
  DoAnything;
Ich finde ErrorCodes ganz nett.
Das sagst du nur, weil du das Prinzip der Exceptions nicht in voller Tiefe verstanden hast.
*ALLE* modernen Programmiersprachen setzen auf Exceptions weil es einfach der bessere Weg ist mit Fehlern zur Laufzeit umzugehen.

Delphi Kurs - Exceptions
Exceptions Tutorial
Wenn ich mir die WinApi anschaue ist da überhaupt nichts mit Exceptions zu finden. Auch so ist es quatsch ressourcenintensive Exceptions zu werfen wenn man auch ohne diese auskommt.
Stell dir vor StrToIntDef etc. würden mit Exceptions arbeiten, und durch abfangen dieser das Ergebnis zurück liefern. Man hätte ganz viel Spaß beim debuggen und langamer wäre das ganze auch.

@FredlFesl: schlechtes Beispiel.
Es ginge auch so:
Delphi-Quellcode:
if Funktion1(aRes) and Funktion2(aRes) and Funktion3(aRes) then
  showmessage('success')
else
  showmessage(ErrCodeToString(aRes));
oder wenn die Funktion per result den Fehler zurück gibt:
Delphi-Quellcode:
function CheckOK(aRes: Integer; out atErr): boolean;
begin
  result := true;
  if aRes <> RES_SUCCESS then
  begin
    aLastErr := aErr;
  end;
end;

procedure Test;
var
  lErr: Integer;
begin
  if CheckOk(Funktion1(aRes),lErr)
    and CheckOk(Funktion2(aRes),lErr)
    and CheckOk(Funktion3(aRes),lErr) then
    showmessage('success')
  else
    showmessage(ErrCodeToString(lErr));
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's

Geändert von SirThornberry ( 5. Jul 2011 um 17:43 Uhr)
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

AW: eigene Fehlercodes als Rückgabewert definieren

  Alt 5. Jul 2011, 18:30
Wenn ich mir die WinApi anschaue ist da überhaupt nichts mit Exceptions zu finden.
Ist ja logisch, weil das Konzept der Exceptions zur Zeitpunkt der Windows Entwicklung bei Microsoft noch nicht Stand der Technik war.
Im .NET Framework sind Exceptions aber von Anfang an etabliert.
Dort werden sogar verschachtelte Exception unterstützt was Delphi leider bislang noch fehlt.
Auch so ist es quatsch ressourcenintensive Exceptions zu werfen wenn man auch ohne diese auskommt
Nur weil eine bestimmte Technik mehr Resourcen benötigt als eine Andere kann man sie noch lange nicht als "Quatsch" bezeichnen.
Es kommt eben auch immer auf die Abstraktionsebene an auf der man sich bewegt.
In einem Treiber oder einer normalen DLL möchte man sicher keine Exceptions nach aussen geben.
Bei einer Active-X DLL oder einer ganz normalen Delphi-Anwendung sieht die Sache schon ganz anderst aus.
Andreas
  Mit Zitat antworten Zitat
Gargamel

Registriert seit: 19. Mär 2007
171 Beiträge
 
#8

AW: eigene Fehlercodes als Rückgabewert definieren

  Alt 5. Jul 2011, 18:34
Da hier gerade die Begriffe DLL und Delphi-Anwendung fielen: Ich hätte evtl. erwähnen sollen, daß der Code tatsächlich in eine DLL soll. Sorry, war mein Fehler.
  Mit Zitat antworten Zitat
FredlFesl

Registriert seit: 19. Apr 2011
293 Beiträge
 
Delphi 2009 Enterprise
 
#9

AW: eigene Fehlercodes als Rückgabewert definieren

  Alt 12. Jul 2011, 08:08
@FredlFesl: schlechtes Beispiel.
Es ginge auch so:
Delphi-Quellcode:
if Funktion1(aRes) and Funktion2(aRes) and Funktion3(aRes) then
  showmessage('success')
else
  showmessage(ErrCodeToString(aRes));
Das ist keine Äquivalenzumformung meines Beispielcodes, also ginge es *NICHT* so.
Gegenfrage:
-In welcher Reihenfolge werden die Funktionen aufgerufen? (links nach rechts? rechts nach links?)
-Werden alle Funktionen aufgerufen? (Stichwort: Compilerschalter)

Beispiel für ein schlechtes Beispiel gefällig?
Code, dessen Funktionsweise von Compilerschaltern und der Sprachenphilosophie abhängt!

Sechs, setzen.

Na, sagen wir: Vier miiinus.
Das Bild hängt schief.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#10

AW: eigene Fehlercodes als Rückgabewert definieren

  Alt 12. Jul 2011, 12:18
Die Funktionen werden von Links nach Rechts aufgerufen.
Und ja, das ganze ist vom Compilerschalter abhängig. Ebenso wie viele Funktionen in der Unit SysUtils.
Somit ist das ganze an einen Compilerschalter gebunden der nahezu immer notwendig ist.
Ich würde es auch nicht generell verurteilen Quelltext an Compilerschalter anzupassen. Ich würde das eher Optimierung nennen.
Zum Beispiel knallt folgender Quelltext bei einem Leerstring wenn die Bereichsprüfung an ist weil angeblich auf Index 1 des Strings zugegriffen wird (was durch die Lengthangabe aber nicht stört)
move(LeerString[1], MyBuffer[0], Length(LeerString)); Jetzt könnte man da eine Prüfung der Länge davor setzen aber warum eine zusätzliche Anweisung einbauen die bei einem selbst nicht notwendig ist.

Also bitte keine 4- sondern eine 3+
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  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 06:58 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