所有程序都應該做的一個常見條件是檢查變量是否被賦值。檢查變量是否爲零的最佳方法?
採取以下語句:
(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