Wann ist es angebracht, eine (klassische) Fall-Through-switch-Anweisung zu verwenden? Wird eine solche Verwendung empfohlen und empfohlen oder sollte sie unter allen Umständen vermieden werden?
switch-statement
shabunc
quelle
quelle
Antworten:
Hier ist ein Beispiel, wo es nützlich wäre.
Diese Art von Dingen (in denen ein Fall den anderen einschließt) ist meiner Meinung nach eher selten, weshalb einige neuere Sprachen entweder kein Fallover zulassen oder eine spezielle Syntax dafür erfordern.
quelle
// INTENTIONAL FALL THROUGH HERE
Kommentar in Großbuchstaben.GetItemsForLevel(Info)
Anruf aufgerufen wirdGetItemsForLevel(Warning)
und so weiter.Ich benutze sie, wenn bestimmte Funktionen für mehr als einen Wert angewendet werden müssen. Angenommen, Sie hatten ein Objekt mit einer Eigenschaft namens operationCode. Wenn der Code gleich 1, 2, 3 oder 4 ist, möchten SieOperationX () starten. Wenn es 5 oder 6 ist, möchten Sie StartOperationY () und 7 Sie StartOperationZ (). Warum 7 vollständige Fälle mit Funktionen und Pausen, wenn Sie Fall-Throughs verwenden können?
Ich denke, es ist in bestimmten Situationen völlig gültig, besonders wenn es 100 if-else-Anweisungen vermeidet. =)
quelle
switch
mit mehrerencase
an den gleichen Code gebundenes. Das ist etwas anderes als ein Fall-through, bei dem die Ausführung von einemcase
zum nächsten fortgesetzt wird, weilbreak
zwischen ihnen kein Dazwischen besteht.Ich habe sie gelegentlich benutzt, ich denke, es ist immer eine angemessene Verwendung - aber nur, wenn der entsprechende Kommentar beigefügt ist.
quelle
Durchfallkoffer sind völlig in Ordnung. Ich stelle oft fest, dass eine Aufzählung an vielen Stellen verwendet wird und dass es einfacher ist, Fall-Through-Logik zu verwenden, wenn Sie einige Fälle nicht unterscheiden müssen.
Zum Beispiel (beachten Sie die Erläuterungen):
Ich finde diese Art der Nutzung vollkommen akzeptabel.
quelle
case X: case Y: doSomething()
und gibtcase X: doSomething(); case Y: doAnotherThing()
. In der ersten ist die Absicht ziemlich explizit, während in der zweiten der Durchbruch beabsichtigt sein kann oder nicht. Meiner Erfahrung nach löst das erste Beispiel in Compilern / Code-Analysatoren niemals Warnungen aus, während das zweite dies tut. Persönlich würde ich das zweite Beispiel nur als "Durchfallen" bezeichnen - ich bin mir jedoch nicht sicher, ob es sich um eine "offizielle" Definition handelt.Es hängt davon ab:
Die zwei Hauptprobleme, die damit verbunden sind, dass ein Fall zum nächsten fällt, sind:
Es macht Ihren Code von der Reihenfolge der case-Anweisungen abhängig. Das ist nicht der Fall, wenn Sie nie durchfallen, und es fügt einen Grad an Komplexität hinzu, der oft unerwünscht ist.
Es ist nicht offensichtlich, dass der Code für einen Fall den Code für einen oder mehrere nachfolgende Fälle enthält.
Einige Orte verbieten ausdrücklich das Durchfallen. Wenn Sie an einem solchen Ort nicht arbeiten und mit dem Üben vertraut sind und wenn das Brechen des fraglichen Codes kein wirkliches Leiden verursacht, ist es möglicherweise nicht das Schlimmste auf der Welt. Wenn Sie dies dennoch tun, sollten Sie einen aufmerksamkeitsstarken Kommentar in die Nähe legen, um diejenigen zu warnen, die später kommen (einschließlich Ihrer Zukunft).
quelle
Hier ist ein kurzes (zugegebenermaßen unvollständiges (kein spezieller Umgang mit Schaltjahren)) Beispiel für einen Sturz, der mein Leben einfacher macht:
quelle
Wenn ich das Bedürfnis habe, von einem Fall zum nächsten zu wechseln (zugegebenermaßen selten), bevorzuge ich es, sehr explizit zu sein, und das
goto case
setzt natürlich voraus, dass Ihre Sprache dies unterstützt.Da das Durchfallen so ungewöhnlich und beim Lesen von Code sehr leicht zu übersehen ist, ist es meiner Meinung nach angebracht, explizit zu sein - und ein Goto sollte, selbst wenn es sich um einen Fall handelt, wie ein Daumenschmerzen auffallen.
Es hilft auch, Fehler zu vermeiden, die auftreten können, wenn case-Anweisungen neu angeordnet werden.
quelle