![]() |
"Auf X zugewiesener Wert wird niemals benutzt" beheben
Hallo,
ich habe eine Funktion, die nur dann true zurückgeben soll, wenn der Code in ihr keine Exception verursacht hat. Das habe wie unten stehend gemacht. Doch dann kommt die Kompilermeldung "Auf 'TMainDlg.TestFunktion' zugewiesener Wert wird niemals benutzt". Was muss ich machen, damit die Meldung nicht mehr angezeigt wird?
Delphi-Quellcode:
function TMainDlg.TestFunktion: Boolean;
begin Result := False; //<-- hier kommt die Meldung. try //Hier steht Code, der eine Exception auslösen könnte. Dadurch wird das Result unten nur zugeweisen, wenn es keine Exception gibt. Ansonsten müsste doch das obere Result benutzt werden. Was ja laut Compilier angeblich nie benutzt wird. Result := true; finally //... end; end; |
AW: "Auf X zugewiesener Wert wird niemals benutzt" beheben
Es gibt leider kein paralleles
Delphi-Quellcode:
und
except
Delphi-Quellcode:
Versuch mal
finally
Delphi-Quellcode:
function TMainDlg.TestFunktion: Boolean;
begin Result := False; try try //Hier steht Code, der eine Exception auslösen könnte. Dadurch wird das Result unten nur zugeweisen, wenn es keine Exception gibt. except on Exception do Result := true; //<-- hier kommt die Meldung. end; finally //Hier steht was, was immer ausgeführt werden muss end; end; |
AW: "Auf X zugewiesener Wert wird niemals benutzt" beheben
@mkinzler: Dein Code gibt true zurück, wenn EINE Exception aufgetrten ist. Die Funktion soll aber nur true zurückgeben, wenn KEINE Exception aufgetrten ist. Das mit dem Finally ist nicht das Problem (Da war der Kommentar von mir zu ungenau formuliert. Ich lösche den mal um nicht noch andere zu verwirren.)
|
AW: "Auf X zugewiesener Wert wird niemals benutzt" beheben
Dann dreh halt die Logik um; am Anfang True und im Exceptionhandler False
|
AW: "Auf X zugewiesener Wert wird niemals benutzt" beheben
Zitat:
|
AW: "Auf X zugewiesener Wert wird niemals benutzt" beheben
Hallo,
die Compilermeldung ist doch eindeutig. Da für den Compiler auf jeden Fall Result:= True aufgerufen wird, die Exception könnte kommen, muss aber nicht.
Delphi-Quellcode:
Oder wenn except und finally
function TMainDlg.TestFunktion: Boolean;
begin Result := False; //<-- hier kommt die Meldung. try //Hier steht Code, der eine Exception auslösen könnte. Dadurch wird das Result unten nur zugeweisen, wenn es keine Exception gibt. Ansonsten müsste doch das obere Result benutzt werden. Was ja laut Compilier angeblich nie benutzt wird. Result := true; except //... end; end;
Delphi-Quellcode:
function TMainDlg.TestFunktion: Boolean;
var StrList: TStringList; begin Result := False; //<-- hier kommt die Meldung. try StrList:= TStringList.Create; try finally StrList.Free; end; Result := true; except //... end; end; Heiko |
AW: "Auf X zugewiesener Wert wird niemals benutzt" beheben
Hallo,
wie Hoika schon erklärte, die Compiler-Meldung ist völlig korrekt. Also... Du möchtest erreichen, dass Deine Funktion nur dann True zurück liefert, wenn keine Exception aufgetreten ist. Das ist genau das, was immer geschieht, denn so funktioniert nun mal das Exception-Konzept. Wenn eine Exception in Deiner Funktion auftritt, dann liefert diese Funktion gar nichts zurück, denn die Funktion wird (nach Abarbeitung eines eventuell vorhandenen finally-Blockes) direkt verlassen, genauso wie der aufrufende Kontext. Wird die Exception nicht irgendwo auf dem Weg "nach oben" abgefangen, wird sie schließlich von der Application als Meldung angezeigt. Das alles kann man aber auch in der Delphi-Hilfe nachlesen^^ Korrekt wäre Dein Funktionsgerüst also so:
Delphi-Quellcode:
Wenn Du jedoch eine eigene Exception-Behandlung in Deine Funktion einbaust und keine Exception oder nur bestimmte Exceptions nicht "raus lässt", dann sähe das Ganze wie folgt aus:
function TMainDlg.TestFunktion: Boolean;
begin try //Hier steht Code, der eine Exception auslösen könnte. Dadurch wird das Result ganz unten am Ende der Funktion nur zugewiesen, wenn es keine Exception gibt. except //... end; Result := True; end;
Delphi-Quellcode:
Und bitte nicht daran stören, dass ich im obigen Beispiel alle Exceptions abfange (on e: Exception) und nicht nur bestimmte - das soll ja nur ein Beispiel sein und das Prinzip verdeutlichen und daher möglichst einfach bleiben ;-)
function TMainDlg.TestFunktion: Boolean;
var bOK: Boolean; begin bOK := True; try //... except on e: Exception do begin bOK := False; //... z.B. eigene Meldung anzeigen, Log schreiben, etc. ... end; end; Result := bOK; end; Noch ein Hinweis am Rande: Viele halten es für einen guten Stil (dazu gehöre ich selbst auch), Result grundsätzlich nur am Ende einer Funktion zuzuweisen, also als allerletztes Statement einer Funktion - und nicht mittendrin und vielleicht sogar noch an mehreren Stellen. ;-) LG |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:48 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