Existe uma razão para preferir um interruptor sobre uma declaração se com apenas uma condição?

StackOverflow https://stackoverflow.com/questions/1638241

Pergunta

Eu encontrei o seguinte código no projecto da minha equipe:

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

Nunca mente que a função não tem um tipo de retorno (I pode facilmente adicionar 'As Boolean'); o que eu estou querendo saber é, poderia haver alguma razão para preferir o acima sobre o seguinte (para mim, muito mais legível) código?

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

Para colocar a questão em termos gerais: Será que faz sentido usar um switch (ou, neste caso, Select Case) bloquear - e / ou blocos aninhados - para testar uma única condição? É este, possivelmente, mais rápido que um if simples?

Foi útil?

Solução

Se você está preocupado com o desempenho ... perfil. Caso contrário, você não pode ir errante errado no lado de legibilidade ...

Outras dicas

Eu não acredito que realmente importa em termos de velocidade, o compilador deve ser capaz de otimizá-lo.

Eu acho que seria apenas uma questão de preferência.

Minha regra de ouro é usar uma instrução switch quando o número de if / else condições é maior do que três. Eu não tenho quaisquer dados por trás por isso faz sentido que não seja a legibilidade / manutenção parece diminuir à medida que o número de if / else condições aumenta.

Eu acho que a resposta no caso específico que você deu não é - não faz sentido, como sugerido em outras respostas que seria de esperar que os compiladores seria otimizar afastado qualquer diferenças práticas

.

Eu colocaria dinheiro em este ser um pouco de corte, cole e excluir codificação -. Tomar um conjunto generalizado de instruções case aninhados e extrair que um pouco que lhe dá o sim / não resultar você precisa

Se isto fosse algo similar em linha e / ou houve uma chamada de função, onde a bandeira de retorno é definido, então se poderia, possivelmente, estar em um ponto onde se podia começar a justificá-la, mas não como ela é.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top