Einzelnen Beitrag anzeigen

Tharon

Registriert seit: 19. Okt 2004
Ort: Frankfurt/Main
12 Beiträge
 
Delphi 2007 Professional
 
#7

AW: "Auf X zugewiesener Wert wird niemals benutzt" beheben

  Alt 20. Jul 2010, 17:23
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:
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;
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:

Delphi-Quellcode:
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;
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

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
Thomas
  Mit Zitat antworten Zitat