次のコードがあるとします。
function DoSomething:Boolean;
var obj : TMyObject;
i : Integer;
begin
Result := False; //We haven't executed GetValue() correctly yet
obj := TMyObject.Create();
try
//perform some code that may produce an exception
i := obj.GetValue();
//Set the return to True as we executed GetValue() successfully
Result := True;
finally
//do some cleanup
obj.Free;
end;
end;
Delphiコンパイラは、Resultに割り当てられた値が最初の行で使用されないことを訴えています。
私はおそらく明らかな何かを見逃していますが、コンパイラがこれを最適化する理由がわかりません(最適化がオンになっている場合)。
私は常に、変数の値が何であるかを混乱させないように、変数を明示的に設定するように教えられてきました。その上、GetValue()
関数が例外を生成した場合、そのResult := True;
行は実行されません。したがって、Delphiが変数を初期化したものに翻弄されます。
それで、この安全で許容できるコードですか?メソッドの最初の行を削除するだけで、読みにくくなりますか?これに失敗すると、特定のコンパイラの警告をオフにする必要がありますが、この警告メッセージが有用な情報を提供する可能性があるため、オフにすることには消極的です。