Недавно я столкнулся с процедурой, которая выглядит примерно так:
procedure TMyForm.DoSomething(list: TList<TMyObject>; const flag: boolean);
var
local: integer;
begin
if flag then
//do something
else local := ExpensiveFunctionCallThatCalculatesSomething;
//do something else
for i := 0 to list.Count do
if flag then
//do something
else if list[i].IntValue > local then //WARNING HERE
//do something else
end;
Это дает Variable 'local' might not have been initialized
, хотя вы можете сказать, прочитав код, который вы не ударите по этой строке, если ветвь кода, инициализирующая ее, не запустилась.
Теперь я мог бы избавиться от этого предупреждения, добавив бесполезный local := 0;
в начало процедуры, но мне интересно, может быть, нет лучшего способа структурировать это, чтобы избежать проблемы. У кого-нибудь есть идеи?