web-dev-qa-db-ja.com

変数がnilかどうかを確認する最良の方法は?

すべてのプログラムが行うべき共通の条件は、変数が割り当てられているかどうかを確認することです。

以下のステートメントを取ります:

(1)

_if Assigned(Ptr) then
begin
  // do something
end;
_

(2)

_if Ptr <> nil then
begin
  // do something
end;
_

Assigned(Ptr)と_Ptr <> nil_の違いは何ですか?

25
MajidTaheri

それは通常同じです...あなたが機能をチェックするときを除いて...

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;

2番目の構文では、関数自体ではなく、関数の結果をチェックします...

37
Whiler

パフォーマンスに関しては、違いはありません。私は個人的には、人間がより迅速に意味を解析できると思うので、2番目の形式を好みます。