Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Rückgabewert einer Function Int64 mit Fehlercode (https://www.delphipraxis.net/134363-rueckgabewert-einer-function-int64-mit-fehlercode.html)

Christian18 20. Mai 2009 15:55


Rückgabewert einer Function Int64 mit Fehlercode
 
Hallo,

ich habe mit folgende Function deklariert.
Delphi-Quellcode:
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

BUG 20. Mai 2009 16:01

Re: Rückgabewert einer Function Int64 mit Fehlercode
 
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

Christian18 20. Mai 2009 16:05

Re: Rückgabewert einer Function Int64 mit Fehlercode
 
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

Win32.API 20. Mai 2009 16:09

Re: Rückgabewert einer Function Int64 mit Fehlercode
 
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;

Bernhard Geyer 20. Mai 2009 16:11

Re: Rückgabewert einer Function Int64 mit Fehlercode
 
Ändere die Signatur der Funktion:

Delphi-Quellcode:
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).

Medium 20. Mai 2009 19:45

Re: Rückgabewert einer Function Int64 mit Fehlercode
 
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.

quendolineDD 20. Mai 2009 19:48

Re: Rückgabewert einer Function Int64 mit Fehlercode
 
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.

Bernhard Geyer 20. Mai 2009 20:14

Re: Rückgabewert einer Function Int64 mit Fehlercode
 
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.

Luckie 20. Mai 2009 20:43

Re: Rückgabewert einer Function Int64 mit Fehlercode
 
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:12 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