AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Rückgabewert einer Function Int64 mit Fehlercode
Thema durchsuchen
Ansicht
Themen-Optionen

Rückgabewert einer Function Int64 mit Fehlercode

Ein Thema von Christian18 · begonnen am 20. Mai 2009 · letzter Beitrag vom 20. Mai 2009
Antwort Antwort
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#1

Rückgabewert einer Function Int64 mit Fehlercode

  Alt 20. Mai 2009, 15:55
Hallo,

ich habe mit folgende Function deklariert.
function TData.GetFileData() : Int64; Der Wertebereich der Function, kann in den kompletten Int64 Wertebereich fallen.

Ich möchte nun allerdings einen Fehlercode zurückgeben. In Java gab es dafür:
Code:
return null;
Hier mal die komplette Function:
Delphi-Quellcode:
function TData.GetFileData() : Int64;
begin
  if not isEmpty() then
    begin
      Result:=Int64Data[DataPointer - 1];
    end
  else
    begin
// Result:=nil; // hier bleib ich irgendwie stecken.
    end;
end;
Dadurch, dass ich den kompletten Wertebereich des Int64 ausnutze, kann ich keinen Fehler -1 oder ähnliches zurückgeben. -1 könnte ja genausogut auch ein Wert sein. Wie macht Ihr Profis das denn?

MfG Christian18
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#2

Re: Rückgabewert einer Function Int64 mit Fehlercode

  Alt 20. Mai 2009, 16:01
Weiß nicht wie die Profis das machen, ich würde eine Exception werfen ...

Delphi-Quellcode:
type EGetFileData = Exception;

// ...

function TData.GetFileData() : Int64;
begin
  if not isEmpty() then
    begin
      Result:=Int64Data[DataPointer - 1];
    end
  else
    begin
      raise EGetFileData.Create('hier bleib ich irgendwie stecken.');
    end;
end;
... und diese im aufrufenden Code mit try...except auffangen.


MfG,
Bug
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#3

Re: Rückgabewert einer Function Int64 mit Fehlercode

  Alt 20. Mai 2009, 16:05
Hallo,

vielen Dank für die schnelle Antwort. Eine Lösung dieser Art kam mir auch schon in den Sinn. Finde ich persönlich jetzt aber nicht wirklich elegant. Ich dachte bisher immer es wäre ein Standard, dass man einer Funktion einen Rückgabewert null bzw. nil verpassen kann. Denn in Programmiersprachen die ich bissher kennelernen durft, kann man das durchaus so machen.

Gibt es weitere Lösungsansätze?

MfG Christian18
  Mit Zitat antworten Zitat
Win32.API

Registriert seit: 23. Mai 2005
312 Beiträge
 
#4

Re: Rückgabewert einer Function Int64 mit Fehlercode

  Alt 20. Mai 2009, 16:09
Alternative zwei (ich bevorzuge aber auch die exceptions ...):

Delphi-Quellcode:
function TData.GetFileData(var AValue: Int64) : Boolean;
begin
  if not isEmpty() then
    begin
      AValue:=Int64Data[DataPointer - 1];
      result := true;
    end
  else
   result := false;
end;
--Win32


Oder bei sowenig code in der Funktion:

Delphi-Quellcode:
TInt64Result = record
 Failed: Boolean;
 Value: Int64;
end;


function TData.GetFileData() : TInt64Result;
begin
  if not isEmpty() then
    begin
      result.Value :=Int64Data[DataPointer - 1];
      result.Failed := false;
    end
  else
   result.Failed := true;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Rückgabewert einer Function Int64 mit Fehlercode

  Alt 20. Mai 2009, 16:11
Ändere die Signatur der Funktion:

function TData.GetFileData(var FileDate: Int64): Boolean; Rückgabewert = False definiert den Fehlerfall.
Das was du willst (bzw. von anderen Programmiersprachen die Autoboxing können) könnte evtl. mit einem Variant nachgebildet werden. Varianten würde ich aber vermeiden da sie langsamer sind als skalare Typen (was auch beim Autoboxing ein Nachteil ist).
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Medium

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

Re: Rückgabewert einer Function Int64 mit Fehlercode

  Alt 20. Mai 2009, 19:45
Dennoch wäre es finde ich richtiger hier eine Exception einzusetzen. Errorcodes sind durchaus schon recht angestaubt, wobei die Variante mit var-Parameter und bool Rückgabe zumindest meinem Gefühl nach auch noch okay ist.
"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
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Rückgabewert einer Function Int64 mit Fehlercode

  Alt 20. Mai 2009, 19:48
IMHO ist der Einsatz von Exception der bessere Weg, als noch über Fehlercodes usw. In Java wird zum Beispiel sowas prinzipiell über Exceptions gelöst.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Rückgabewert einer Function Int64 mit Fehlercode

  Alt 20. Mai 2009, 20:14
Ich würde Exception nur dann einsetzen wenn der fehlende int64-Wert einen fehlerfall darstellt und eine gesonderte Fehlerbehandlung erfolgt. Ist dieser Wert jedoch ein normaler Fall (z.B. bei Lied Jahr der komponierung unbekannt) so würde ich keine Exception verwenden.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Rückgabewert einer Function Int64 mit Fehlercode

  Alt 20. Mai 2009, 20:43
Ich würde generell Exceptions nutzen. Dies entspricht zum einem den OOP Konzept und zum anderen erspart man sich die Abfrage des Fehlercodes. hat man mehrere solcher Funktionen kann es durch aus ziemlich unübersichtlich werden mit den verschachtelten if-Abfragen.

Mit Exceptions kan nman gerade runter programmieren und muss sich nicht um die Fehlerbehandlung kümmern.
Michael
Ein Teil meines Codes würde euch verunsichern.
  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 21:59 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