¿Hay alguna razón para preferir un cambio sobre una instrucción if con una sola condición?

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

Pregunta

Encontré el siguiente código en el proyecto de mi equipo:

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

No importa que la función no tenga un tipo de retorno (puedo agregar fácilmente 'As Boolean'); Lo que me pregunto es, ¿podría haber alguna razón para preferir lo anterior sobre el siguiente código (para mí, mucho más legible)?

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 poner la pregunta en términos generales: ¿Tiene sentido usar un bloque switch (o, en este caso, Select Case ) - y / o anidado bloques - para probar una sola condición? ¿Es esto posiblemente más rápido que un if sencillo?

¿Fue útil?

Solución

Si te preocupa el rendimiento ... perfil. De lo contrario, no puede equivocarse errando en el lado de la legibilidad ...

Otros consejos

No creo que realmente importe en términos de velocidad, el compilador debería poder optimizarlo.

Creo que sería solo una cuestión de preferencia.

Mi regla de oro es usar una declaración de cambio cuando el número de condiciones if / else es mayor que tres. No tengo ningún dato detrás de por qué esto tiene sentido, aparte de la legibilidad / mantenimiento parece disminuir a medida que aumenta el número de condiciones if / else.

Creo que la respuesta en el caso específico que ha dado es no, no tiene sentido, como se sugiere en otras respuestas, uno esperaría que los compiladores optimicen cualquier diferencia práctica.

Apostaría a que esto es un poco de codificación de cortar, pegar y eliminar, tomando un conjunto generalizado de declaraciones de casos anidados y extrayendo ese bit que le da el resultado sí / no que necesita.

Si esto fuera algo similar en línea y / o hubiera una llamada a la función donde se establece el indicador de retorno, entonces uno podría, posiblemente, estar en un punto donde uno podría comenzar a justificarlo, pero no como es.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top