![]() |
Rückgabewert einer Function Int64 mit Fehlercode
Hallo,
ich habe mit folgende Function deklariert.
Delphi-Quellcode:
Der Wertebereich der Function, kann in den kompletten Int64 Wertebereich fallen.
function TData.GetFileData() : Int64;
Ich möchte nun allerdings einen Fehlercode zurückgeben. In Java gab es dafür:
Code:
Hier mal die komplette Function:
return null;
Delphi-Quellcode:
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? :-)
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; MfG Christian18 |
Re: Rückgabewert einer Function Int64 mit Fehlercode
Weiß nicht wie die Profis das machen, ich würde eine Exception werfen ...
Delphi-Quellcode:
... und diese im aufrufenden Code mit try...except auffangen.
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; MfG, Bug |
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 |
Re: Rückgabewert einer Function Int64 mit Fehlercode
Alternative zwei (ich bevorzuge aber auch die exceptions ...):
Delphi-Quellcode:
--Win32
function TData.GetFileData(var AValue: Int64) : Boolean;
begin if not isEmpty() then begin AValue:=Int64Data[DataPointer - 1]; result := true; end else result := false; end; 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; |
Re: Rückgabewert einer Function Int64 mit Fehlercode
Ändere die Signatur der Funktion:
Delphi-Quellcode:
Rückgabewert = False definiert den Fehlerfall.
function TData.GetFileData(var FileDate: Int64): Boolean;
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). |
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.
|
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.
|
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.
|
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 02:55 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