2012-05-15 43 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可以是任何舊的函數調用。 –

相關問題