Предположим, у меня есть следующий код:
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 инициализировала переменную.
Является ли этот код безопасным/приемлемым? Должен ли я просто удалить первую строку метода, что затруднит его чтение? В противном случае мне придется отключить конкретное предупреждение компилятора, но я не хочу этого делать, поскольку это предупреждающее сообщение может дать полезную информацию.