Funktionen nedan ger en hint när den kompileras i Delphi7. Den säger att 'Value assigned to TForm1.testfunc' is never used. Alltså att raden Result := nil är onödig eftersom man tilldelar den ett värde senare. Normalt är det ju också så, men om det blir ett exception nånstans i funktionen så är det praktiskt att ha ett värde klart i Result. Jag har en global exceptionhandler i mitt program (JCL) där jag får ut metod och radnr. Men kompilatorn fattar inte att Result variabeln bör alltid initieras i funktionen. Finns det nåt knep? Ett alternativ är ju att ha en try/except/end sats i funktionen och tilldela Result där, men det vill jag helst undvika om det går. Om du vill ha ett default-resultat ut om det blir exception kan du skriva funktionen så här:Definiera returvärden vid exceptions?
function Tform1.testfunc: TSimple;
var
F: TSimple;
begin
Result := nil;
assert(false,'This is an assert');
F := TSimple.Create;
Result := F;
end;Sv: Definiera returvärden vid exceptions?
function Tform1.testfunc: TSimple;
var
F: TSimple;
begin
try
assert(false,'This is an assert');
F := TSimple.Create;
Result := F;
except
Result := nil;
end;
end;
Det gör att om det kastas en exception inom funktionen så blir returvärdet nil. Om du inte har en try/except så blir returvärdet 'ointressant' eftersom koden som tar emot returvärdet inte kommer att köras. (Efter exceptionen kastas är nästa rad kod som körs vid nästa Except)
/Per-Erik