所有程序都应该做的一个常见条件是检查变量是否被赋值。检查变量是否为零的最佳方法?
采取以下语句:
(1)
if Assigned(Ptr) then
begin
// do something
end;
(2)
if Ptr <> nil then
begin
// do something
end;
是什么Assigned(Ptr)
和Ptr <> nil
之间的区别?
所有程序都应该做的一个常见条件是检查变量是否被赋值。检查变量是否为零的最佳方法?
采取以下语句:
(1)
if Assigned(Ptr) then
begin
// do something
end;
(2)
if Ptr <> nil then
begin
// do something
end;
是什么Assigned(Ptr)
和Ptr <> nil
之间的区别?
它通常是相同的......当您检查的功能,除了...
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;
随着第二语法,它会检查函数的结果,而不是函数本身...
就性能而言,没有区别。我个人更喜欢第二种形式,因为我发现人类可以更快地解析意思。
非常奇怪的人发现'<> nil'比分配更容易阅读。我个人更喜欢完全相同的原因。换句话说,我认为选项1更容易解析。 –
我也会说'如果Assigned'更可读,而不是<>操作数。 – 2012-05-15 14:41:35
我认为原因是乍一看Assigned可以是任何旧的函数调用。 –
查看http://docwiki.embarcadero.com/Libraries/en/System.Assigned – TLama
“哪个更好?”你的标准是什么? –
结果可能不同..见下面我的答案... – Whiler