26

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

以下のステートメントを見てください。

(1)

if Assigned(Ptr) then
begin
  // do something
end;

(2)

if Ptr <> nil then
begin
  // do something
end;

Assigned(Ptr)とはどう違いPtr <> nilますか?

4

2 に答える 2

39

通常は同じです...関数をチェックする場合を除いて...

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 番目の構文では、関数自体ではなく、関数の結果をチェックします...

于 2012-05-15T14:17:58.320 に答える
5

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

于 2012-05-15T13:59:57.783 に答える