Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Rückgabewert könnte undefiniert sein ! (https://www.delphipraxis.net/18423-rueckgabewert-koennte-undefiniert-sein.html)

kiar 18. Mär 2004 12:54


Rückgabewert könnte undefiniert sein !
 
folgende Funktion
Delphi-Quellcode:
function Holedaten(s:string):TDatetime;
    var
      a:string;
    begin
        a:= Stringreplace(stringreplace(s,'.','0',[rfReplaceAll]),' ','0',
                          [rfReplaceAll]);
         if strtoInt(a) <> 0 then
            result:=(strtoDate(s))
          else
            showmessage('Es müssen beide Felder ausgefüllt werden!');
    end;
ist ja klar, das der Rückgabewert undefiniert sein kann und zwar wenn
Delphi-Quellcode:
 a = 0
habe den else Teil so geändert
Delphi-Quellcode:
else
 begin
    showmessage('Es müssen beide Felder ausgefüllt werden!');
    result :=now;
 end;
das gefällt mir aber nicht.

was gibt es für lösungsmöglichkeiten.

danke raik

himitsu 18. Mär 2004 13:06

Re: Rückgabewert könnte undefiniert sein !
 
Delphi-Quellcode:
function Holedaten(s:string):TDatetime;
    var
      a:string;
    begin
        a:= Stringreplace(stringreplace(s,'.','0',[rfReplaceAll]),' ','0',
                          [rfReplaceAll]);
        if strtoInt(a) <> 0 then
           result:=(strtoDate(s))
        else
           begin
             showmessage('Es müssen beide Felder ausgefüllt werden!');
             result :=now;
           end;
    end;
was gefällt dir denn daran nicht?

das ist die wohl Beste Möglichkeit.

Es geht natürlich auch so:
Delphi-Quellcode:
function Holedaten(s:string):TDatetime;
    var
      a:string;
    begin
        result :=now;
        a:= Stringreplace(stringreplace(s,'.','0',[rfReplaceAll]),' ','0',
                          [rfReplaceAll]);
        if strtoInt(a) <> 0 then
           result:=(strtoDate(s))
        else
          showmessage('Es müssen beide Felder ausgefüllt werden!');
    end;
wobei es so auch ganz nett ist ^^

Delphi-Quellcode:
function Holedaten(s:string):TDatetime;
    begin
      if strtoInt(Stringreplace(stringreplace(s,'.','0',[rfReplaceAll]),
                  ' ','0',[rfReplaceAll])) <> 0 then
         result:=(strtoDate(s))
      else
         begin
           showmessage('Es müssen beide Felder ausgefüllt werden!');
           result :=now;
         end;
    end;

Dannyboy 18. Mär 2004 13:07

Re: Rückgabewert könnte undefiniert sein !
 
Einfach mal initialisieren:
Delphi-Quellcode:
function Holedaten(s:string):TDatetime;
    var
      a:string;
    begin
        result:= now; //hier wird initialiseirt. Ich übernehme diese Zeile aus Deinem Bsp.
        a:= Stringreplace(stringreplace(s,'.','0',[rfReplaceAll]),' ','0',
                          [rfReplaceAll]);
         if strtoInt(a) <> 0 then
            result:=(strtoDate(s))
          else
            showmessage('Es müssen beide Felder ausgefüllt werden!');
    end;

Dannyboy 18. Mär 2004 13:09

Re: Rückgabewert könnte undefiniert sein !
 
@himitsu: Ok, Du warst wohl ein paar Milisekunden schneller als ich. :)

kiar 18. Mär 2004 13:13

Re: Rückgabewert könnte undefiniert sein !
 
hallo himitsu,

weil, bei now zwar der rückgabewert definiert ist, ich den aber nicht brauche.

naja, ich denke in dem algo für die abfrage muß ich was ändern.

raik

himitsu 18. Mär 2004 13:18

Re: Rückgabewert könnte undefiniert sein !
 
Na wenn du's nicht brauchst, dann gehts auh so

Delphi-Quellcode:
begin
    showmessage('Es müssen beide Felder ausgefüllt werden!');
    result :=now;
end;
Oder wenn der Rückgabewert der Funktion eh nicht ausgewertet wird, wenn der die Eingabe falsch ist, dann mach's wie M$ und ignoriere einfach den Fehler :roll:

woki 18. Mär 2004 13:23

Re: Rückgabewert könnte undefiniert sein !
 
HI,

ich finde die Lösung mit dem now doch sehr überraschend, ohne jetzt genaueres über den Kontext zu wissen, würde ich sagen für den Fall, dass die Auswertung fehtlschlägt, wäre es angemesseen eine exception auszulösen, und wenn in einer solchen Situation etwas zurückgeliefert wird, dann ein fester Wert, z.B. 0, bei now hat der Aufrufer der Funktion überhaupt keine Chance, zu erkennen, dass hier etwas schiefgegangen ist.

Grüsse
Woki


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