2012-05-15 9 views
18

すべてのプログラムが行うべき共通の条件は、変数が割り当てられているかどうかをチェックすることです。変数がnilかどうかをチェックする最良の方法は?

は、以下のステートメントを取る:

(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

それは...あなたは機能をチェックする場合を除いて...通常は2番目の構文では

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

性能的には違いはありません。私は個人的には、人間が意味をより速く解析できることを見出して、第2の形式を好む。

+11

非常に奇妙な人間は、 '<> nil'が割り当てられたものより読みやすくなります。私は個人的にはまったく同じ理由で正反対を好む。言い換えれば、オプション1は解析が簡単だと思います。 –

+0

また、が<>オペランドではなく人間が読めるようにするといいでしょう。 –

+2

私は、その理由は一目瞭然だと思います。Assignedは古い関数呼び出しであればどんなものでもかまいません。 –

関連する問題