Gibt es einen Grund, einen Schalter über eine if-Anweisung bevorzugen mit nur einem Zustand?

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

Frage

fand ich den folgenden Code in meinem Team des Projekts:

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

Kümmern Sie nie, dass die Funktion keinen Rückgabetyp hat (I ‚As Boolean‘ leicht hinzufügen können); was ich mich frage ist, könnte es ein Grund, die oben über den folgenden (für mich, viel besser lesbar) zu bevorzugen Code?

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

Um die Frage ganz allgemein gesagt: Macht es Sinn, einen switch zu verwenden (oder in diesem Fall Select Case) Block - und / oder verschachtelte Blöcke - eine einzige Bedingung zu testen? Ist dies möglicherweise schneller als eine einfache if?

War es hilfreich?

Lösung

Wenn Sie über die Leistung ... Profil besorgt sind. Ansonsten kann man nichts falsch irrende auf der Seite der Lesbarkeit gehen ...

Andere Tipps

ich in Bezug auf die Geschwindigkeit ankommt, es eigentlich nicht glauben, sollte der Compiler in der Lage sein, es zu optimieren.

Ich denke, es wäre nur eine Frage der Präferenz sein.

Faust Meine Regel ist eine switch-Anweisung zu verwenden, wenn die Anzahl der if / else Bedingungen größer als drei ist. Ich habe keine Daten hinter warum dieses Gefühl anders als Lesbarkeit macht / Wartbarkeit scheint, als die Anzahl der if / else Bedingungen steigen zu verringern.

Ich denke, die Antwort in dem speziellen Fall, dass Sie gegeben haben, nicht - es macht keinen Sinn, wie in anderen Antworten vorgeschlagen man hoffen würde, dass die Compiler keine praktischen Unterschiede optimieren entfernt würden

.

würde ich Geld auf dieser ist ein bisschen Ausschneiden, Einfügen setzen und löschen Codierung - eine verallgemeinerte Satz von verschachtelten case-Anweisungen zu nehmen und zu extrahieren, dass ein Bit, dass Sie die Ja / Nein-Ergebnis erhalten Sie benötigen

.

Ist dies etwas ähnlich war in-line und / oder es gab einen Funktionsaufruf in dem der Rückkehr-Flag gesetzt ist, dann könnte man möglicherweise an einem Punkt sein, wo man es zu rechtfertigen beginnen könnte, aber nicht wie es ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top