2012-05-15 41 views
18

所有程序都应该做的一个常见条件是检查变量是否被赋值。检查变量是否为零的最佳方法?

采取以下语句:

(1)

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

(2)

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

是什么Assigned(Ptr)Ptr <> nil之间的区别?

+2

查看http://docwiki.embarcadero.com/Libraries/en/System.Assigned – TLama

+0

“哪个更好?”你的标准是什么? –

+0

结果可能不同..见下面我的答案... – Whiler

回答

30

它通常是相同的......当您检查的功能,除了...

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; 

随着第二语法,它会检查函数的结果,而不是函数本身...

5

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

+11

非常奇怪的人发现'<> nil'比分配更容易阅读。我个人更喜欢完全相同的原因。换句话说,我认为选项1更容易解析。 –

+0

我也会说'如果Assigned'更可读,而不是<>操作数。 – 2012-05-15 14:41:35

+2

我认为原因是乍一看Assigned可以是任何旧的函数调用。 –

相关问题