所有程序应该做的一个常见情况是检查变量是否已分配。
采取以下声明:
(1)
if Assigned(Ptr) then
begin
// do something
end;
(2)
if Ptr <> nil then
begin
// do something
end;
Assigned(Ptr)
和Ptr <> nil
之间的区别是什么?
答案 0 :(得分:35)
它通常是相同的......除非你检查一个功能......
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;
使用第二种语法,它将检查函数的结果,而不是函数本身......
答案 1 :(得分:5)
就性能而言,没有区别。我个人更喜欢第二种形式,因为我发现人类可以更快地解析意义。