Gibt es einen Grund, einen Schalter über eine if-Anweisung bevorzugen mit nur einem Zustand?
-
08-07-2019 - |
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
?
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.