检查变量是否为零的最佳方法是什么?

Maj*_*eri 24 delphi pointers

所有程序应该做的一个常见条件是检查是否分配了变量.

采取以下声明:

(1)

if Assigned(Ptr) then
begin
  // do something
end;
Run Code Online (Sandbox Code Playgroud)

(2)

if Ptr <> nil then
begin
  // do something
end;
Run Code Online (Sandbox Code Playgroud)

Assigned(Ptr)和之间有什么区别Ptr <> nil

Whi*_*ler 36

它通常是相同的......除非你检查一个功能......

function mfi: TObject;
begin
  Result := nil;
end;

procedure TForm1.btn1Click(Sender: TObject);
type
  TMyFunction = function: TObject of object;
var
  f: TMyFunction;
begin
  f := mfi;

  if Assigned(f) then
  begin
    ShowMessage('yes'); // TRUE
  end
  else
  begin
    ShowMessage('no');
  end;

  if f <> nil then
  begin
    ShowMessage('yes');
  end
  else
  begin
    ShowMessage('no');  // FALSE
  end;
end;
Run Code Online (Sandbox Code Playgroud)

使用第二种语法,它将检查函数的结果,而不是函数本身...


500*_*ror 5

就性能而言,没有区别.我个人更喜欢第二种形式,因为我发现人类可以更快地解析意义.

  • 非常奇怪的人发现`<> nil`比分配更容易阅读.出于同样的原因,我个人更喜欢完全相反的情况.换句话说,我认为选项1更容易解析. (13认同)
  • 我认为原因是乍一看Assigned可以是任何旧的函数调用. (2认同)