2009-10-28 99 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语句,并提取一个位,给你你需要的是/否结果。

如果这是类似的内联和/或有一个函数调用,其中设置了返回标志,那么可能有人可能会开始证明它是正确的,但不是它的样子。