![]() |
wie gibt man "nix" zurück?
hoi,
ich habe eine funktion, ca so:
Delphi-Quellcode:
function bla: MyRecord
begin result := nix; { falls später ein fehler auftritt soll halt nix zurückgegeben werden } if irgendwas() then result := aRecord; end; ohne die erste zeile bekomme ich ja immer warnungen wie: "ergebnis könnte undefiniert sein" was tu ich dagen? sowas wie {$WARNINGS OFF} wollte ich eigentlich nich benutzen. |
Re: wie gibt man "nix" zurück?
nil hilft nicht?
|
Re: wie gibt man "nix" zurück?
dafür gibt es den ausdruck "nil"
das ist ein zeiger der sozusagen nirgendwo hinzeigt |
Re: wie gibt man "nix" zurück?
ne nil geht nicht, schon getestet
Zitat:
|
Re: wie gibt man "nix" zurück?
Wenn dein Rückgabetyp ein Record ist, dann wird auch ein Exemplar des entsprechenden Records zurückgeliefert. Entweder du stellst dein Design um oder du fügst deinem Record ein Feld hinzu, das anzeigt, dass der Record nicht gültig initialisiert ist.
|
Re: wie gibt man "nix" zurück?
probiert mal einem leeren string zu nehmen -> ''
wenn nichts passiert, weise einfach einen lehren string zu, du muesstest auch mal posten, vom was für einem typ TDBFile ist. so wie ich das vermute, ist es ein record, was sich aus verschiedenen datentypen zusammensetzt. warum willst du uberhaupt nicht zuweisen. ich wuerde es so machen, das ich den record bei programmstart mit vom mir definierten werten füttere, und du noch ne abfrage machst, das wenn halt diese werte drinsind then do nothing [edit=r_kerber]Doppelpost gelöscht. Mfg, r_kerber[/edit] |
Re: wie gibt man "nix" zurück?
Delphi-Quellcode:
TDBFileItem = record
irgendwas: string[12]; Password: TMD5Digest; fgjgj: string[255]; ghgj: string[255]; end; so sieht er aus [edit=r_kerber]Doppelpost gelöscht. Mfg, r_kerber[/edit] |
Re: wie gibt man "nix" zurück?
Hi,
Wo immer möglich würde ich persönlich anstelle von Records lieber Nachfahren von TObject benutzen , damit lässt sich imho viel besser arbeiten... |
Re: wie gibt man "nix" zurück?
hi,
ich würde dem record noch ein feld namens "error" (oder so ähnlich) hinzufügen. standardmäßig ist der wert 0. wenn ein fehler auftritt , dann ist der wert 1. nachdem die funktion aufgerufen wurde und ein record zurückgegeben hat, überprüfst du, ob error=0. wenn nicht, dann ist das zurückgeliferte record unbrauchbar ;) Aenogym |
Re: wie gibt man "nix" zurück?
eine klasse als rückgabewert?
aeneogm: danke, mal versuchen ;) auch an alle anderen danke |
Re: wie gibt man "nix" zurück?
dann mach das so, weise allen stringwerten zum programmstart einen string z.B. "test" zu
in deiner routine fragste dann ab, ob dieser string drin ist
Delphi-Quellcode:
if irgentwas() then result:=aRecord
if not irgentwas() then begin result.irgentwas:='test'; result.fgjgj:='test'; result.ghgj:='test; // den typ passwort kenn ich net, scheint ein gekapseltes record für einen MD5 hash zu sein, dann weist du halt z.B. nen hash aus nur nullen zu end; |
Re: wie gibt man "nix" zurück?
oder du erstellst dir deinen eigenen nil-record!
|
Re: wie gibt man "nix" zurück?
hallo richard,
werde es übernehmen, danke :) @ibp: wie das denn? ich kann euf ein rekord doch nicht direkt zugreifen oder? |
Re: wie gibt man "nix" zurück?
du kannst auf die felder eines recors zugreifen
Delphi-Quellcode:
siehe Delphi hilfe (F1-Taste)
Sie können auf die Felder eines Records zugreifen, indem Sie die Feldbezeichner mit dem Record-Namen qualifizieren:
Record1.Year := 1904; Record1.Month := Jun; Record1.Day := 16; Alternativ dazu ist auch die Verwendung einer with-Anweisung möglich: with Record1 do begin Year := 1904; Month := Jun; Day := 16; end; |
Re: wie gibt man "nix" zurück?
indem du einen nilrecord definierst!
z.B.:
Delphi-Quellcode:
var nilrecord: TDBFileItem
... nilrecord.irgendwas:='nix' nilrecord.Password:'garnix'; // TMD5Digest was auch immer das für ein typ ist nilrecord.fgjgj:='auchnix'; nilrecord.ghgj:='nienix'; ... |
Re: wie gibt man "nix" zurück?
Hallo,
Du könntest einfach Result mit Nullen anfüllen. Etwa so:
Delphi-Quellcode:
function bla: MyRecord
begin fillchat(result, sizeof(MyRecord), #0); if irgendwas() then result := aRecord; end; grüße, daniel |
Re: wie gibt man "nix" zurück?
bezogen auf deine Frage etwa so
Delphi-Quellcode:
;) Spaß beiseite, Sanchez Lösung ist schon die richtige, du musst aber aufpassen das die Felder des Records auchmit NULL-Werten korrekt initialisiert sind. D.h. es gibt durchaus die Möglichkeit das ein Feld zb. ein Set darstellt und per Definitino nicht das 0'te Element auch wirklich als Leer-Element zählt. In diesem Falle würde also FillChar() eine 0 in dieses Feld speichern, was aber nicht gleichzusetzen wäre wie ein Leer-Element.
function bla: string;
begin result := 'nix'; end; Gruß Hagen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:34 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