变量可能尚未在Delphi函数中初始化

时间:2017-08-16 07:45:10

标签: delphi

我正在构建此函数,它将返回查询是否返回ID。我是Delphi的新手,我收到了错误

  

可能无法初始化变量emailExistsId。

我的代码:

function emailExists (const APersonId: TStandardPK) : Boolean ;
var
  Email : TPhoneEmail;
  emailExistsId: TStandardPK;

begin
  Email := TPhoneEmail.Create(nil);
  try
    emailExistsId :=  Email.qrySelect.FieldByName('id').AsFloat;
  finally
    if emailExistsId <> 0  then
    Result := TRUE
    else
    Result :=False;
  end;
end;

1 个答案:

答案 0 :(得分:10)

提示是正确的。考虑一下代码:

try
  emailExistsId := Email.qrySelect.FieldByName('id').AsFloat;
finally
  if emailExistsId <> 0  then
    Result := TRUE
  else
    Result :=False;
end;

如果评估Email.qrySelect.FieldByName('id').AsFloat会导致异常,则emailExistsId将不会分配值。然后,您的代码将在未初始化状态下读取emailExistsId。因此编译器产生提示。当然,这完全没有实际意义,因为异常传播并且调用者在任何情况下都不会收到返回值。

你的代码在任何情况下都太复杂了,而且它泄漏了。它应该是:

function emailExists(const APersonId: TStandardPK): Boolean;
var
  Email: TPhoneEmail;
begin
  Email := TPhoneEmail.Create(nil);
  try
    Result := Email.qrySelect.FieldByName('id').AsFloat <> 0;
  finally
    Email.Free;
  end;
end;