全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:4422
推到 Plurk!
推到 Facebook!

Assign & nil 的用法

答題得分者是:ddy
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-08-20 00:31:58 IP:210.85.xxx.xxx 未訂閱
請問各位! 我在判斷這個form是否已開啟時, 有人告訴我用 if Form1 <> nil then .... 也有人說 if Assigned(Form1) then .... 請問這兩者有何差別, 那一個比較 "好" ?
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-08-20 00:47:06 IP:211.74.xxx.xxx 未訂閱
在「Delphi 指令參考手冊」一書中提到 用Assigned 的方式會比直接用nil 來比較的效率會更好 也提到使用assigned與nil是風格上的議題 可見差異性是不大的 倒是可以寫個loop 去測試二者所花的時間是否有明顯的差異 噓~~~~~~沉思中…
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-08-20 15:16:07 IP:192.168.xxx.xxx 未訂閱
引言: 請問各位! 我在判斷這個form是否已開啟時, 有人告訴我用 if Form1 <> nil then .... 也有人說 if Assigned(Form1) then .... 請問這兩者有何差別, 那一個比較 "好" ?
我是都用if Form1 <> nil then .... 但有一點要注意,當Form1尚未Create時為Nil, 若已經Create之後再Free掉,則Form1不為Nil, 最好在Form1.free之後再設定Form1:=Nil ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-08-20 17:03:14 IP:210.85.xxx.xxx 未訂閱
縱合版主與站長的說明, 小弟另有疑問 如果 form已create 後有 free, 但未設定 form1:= nil 時, if Assigned(Form1) 其結果如何? 另外, 版主提到用 loop 來測速度, 我想這可能不太容易測的出來, 因為 if這個行為只是在一瞬間發生, 對人類來說速度已不是重點, 只是我比較好奇的是 nil 與 Assigned 兩者在運用上有沒有實際的差異, 例如說在那個情況一定要用Assigned 或 nil , 因為依站長所言, form被create 後未釋放form記憶空間(nil), 則此時如果用 nil則可能判斷錯誤,那是否改用Assigned就可以解決, 如果是這樣, 則以 Assigned 來判斷 form是否存在就比 nil 要好, 那如此又與版主所提到的有所出入, 我想這很可能是觀念問題, 或者是Delphi新舊版相容的問題(就好像 float 與 double, real 的變數宣告一樣), 不知各位意下如何?
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-08-20 18:46:06 IP:203.204.xxx.xxx 未訂閱
引言: 縱合版主與站長的說明, 小弟另有疑問 如果 form已create 後有 free, 但未設定 form1:= nil 時, if Assigned(Form1) 其結果如何? 一樣是 True 另外, 版主提到用 loop 來測速度, 我想這可能不太容易測的出來, 因為 if這個行為只是在一瞬間發生, 對人類來說速度已不是重點, 只是我比較好奇的是 nil 與 Assigned 兩者在運用上有沒有實際的差異, 例如說在那個情況一定要用Assigned 或 nil , 因為依站長所言, form被create 後未釋放form記憶空間(nil), 則此時如果用 nil則可能判斷錯誤,那是否改用Assigned就可以解決, 如果是這樣, 則以 Assigned 來判斷 form是否存在就比 nil 要好, 那如此又與版主所提到的有所出入, 我想這很可能是觀念問題, 或者是Delphi新舊版相容的問題(就好像 float 與 double, real 的變數宣告一樣), 不知各位意下如何?
人生有夢,逐夢而行。 人若為善,福雖未至,禍已遠離。 人若為惡,禍雖未至,福已遠離。 http://www.taconet.com.tw/jieshu/
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-08-21 01:10:09 IP:61.59.xxx.xxx 未訂閱
引言: 另外, 版主提到用 loop 來測速度, 我想這可能不太容易測的出來, 因為 if這個行為只是在一瞬間發生, 對人類來說速度已不是重點, 只是我比較好奇的是 nil 與 Assigned 兩者在運用上有沒有實際的差異, 例如說在那個情況一定要用Assigned 或 nil , 因為依站長所言, form被create 後未釋放form記憶空間(nil), 則此時如果用 nil則可能判斷錯誤,那是否改用Assigned就可以解決, 如果是這樣, 則以 Assigned 來判斷 form是否存在就比 nil 要好, 那如此又與版主所提到的有所出入, 我想這很可能是觀念問題, 或者是Delphi新舊版相容的問題(就好像 float 與 double, real 的變數宣告一樣), 不知各位意下如何?
我寫了一個程式測試它的效能差異 果然是…比較執行時間沒有那一個是絕對的快速,實在是沒什麼差別 我也看過了System、SysUtils...內的程式碼,發現NIL 大部份是用在Pointer 的比較,Assigned 則用在判斷物件 應是老外設計上的習慣,以上述的問題看來,也有可能是Assigned 在物件的判斷上加了些防錯。 噓~~~~~~沉思中…
系統時間:2024-04-23 21:02:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!