2009-10-28 132 views
1

我發現我的團隊的項目下面的代碼:是否有理由選擇只有一個條件的if語句?

Public Shared Function isRemoteDisconnectMessage(ByRef m As Message) 
    isRemoteDisconnectMessage = False 
    Select Case (m.Msg) 
     Case WM_WTSSESSION_CHANGE 
      Select Case (m.WParam.ToInt32) 
       Case WTS_REMOTE_DISCONNECT 
        isRemoteDisconnectMessage = True 
      End Select 
    End Select 
End Function 

別介意函數沒有返回類型(我可以輕鬆地添加「作爲布爾」);我想知道的是,是否有任何理由更喜歡上述內容(對我來說,更可讀)的代碼?

Public Shared Function isRemoteDisconnectMessage(ByRef m As Message) As Boolean 
    Return m.Msg = WM_WTSSESSION_CHANGE AndAlso _ 
      m.WParam.ToInt32() = WTS_REMOTE_DISCONNECT 
End Function 

提出這個問題來概括:是否有意義使用switch(或者,在這種情況下,Select Case)塊 - 和/或嵌套塊 - 要測試一個條件?這可能比簡單的if更快嗎?

回答

4

如果您擔心性能...配置文件。否則,你不會出錯在可讀性方面......

+0

哇,我問這個問題就像一年前一樣。現在看起來像一個非常愚蠢的問題。那麼,只是做一些超晚的答案接受...... – 2010-07-23 12:26:11

2

我不認爲它在速度方面實際上很重要,編譯器應該能夠優化它。

我認爲這只是一個偏好問題。

1

我的經驗法則是當if/else條件數大於三時使用switch語句。我沒有任何背後的數據說明,除了if/else條件的數量增加之外,可讀性/可維護性似乎會下降。

1

我認爲你給出的具體情況的答案是否定的 - 它沒有任何意義,正如其他答案中所暗示的那樣,人們希望編譯器能夠優化掉任何實際的差異。

我把錢放在這是一個剪裁,粘貼和刪除代碼 - 採取一套一般化的嵌套case語句,並提取一個位,給你你需要的是/否結果。

如果這是類似的內聯和/或有一個函數調用,其中設置了返回標誌,那麼可能有人可能會開始證明它是正確的,但不是它的樣子。