Załóżmy, że mam następujące rutynowe:Delphi - Jaka jest "poprawna" kolejność bloków poza i na końcu?
function ReadFile(f : TFilename) : Boolean;
var
fs : TFileStream;
begin
Result := False;
try
fs := TFileStream.Create(f, ...);
try
// read file ...
Result := True;
finally
FreeAndNil(fs);
end;
except
// handle exceptions ...
end;
end;
Jakie są konsekwencje posiadania except
i finally
transponowane? Widziałem wiele postów z nimi w obie strony, ale nie widziałem jasnego wyjaśnienia, który z nich jest odpowiedni w jakich przypadkach (nadal uważam, że to ciekawe, że w powyższym konstrukcie, blok finally
wykonuje po z except
blok!).
Widziałem również posty, które sugerują, że mieszanie bloków try..except
i try..finally
nie jest dobrym pomysłem. Jak można tego uniknąć w sytuacjach, gdy rutyna zgłasza wyjątek w ramach normalnej operacji - na przykład w niektórych procedurach Indy?
* "w powyższym konstrukcie blok finally jest wykonywany po bloku except" * - To nie jest poprawne. –