Ich bin ein bisschen verwirrt, wann immer oder wann nicht break
nach dem letzten Fall, oft default
.
switch (type) {
case 'product':
// Do behavior
break;
default:
// Do default behavior
break; // Is it considered to be needed?
}
break
Meines switch
Erachtens besteht der einzige Zweck darin, zu verhindern, dass der Code im Rest des Falls ausgeführt wird.
Wird es dann als logischer angesehen, einen break
Leisten aufgrund von Konsistenz zu haben oder ihn zu überspringen, weil break
überhaupt keine funktionale Verwendung angewendet wird? Beides ist meiner Meinung nach auf unterschiedliche Weise logisch.
Dies könnte bis zu einem gewissen Grad mit dem Beenden einer .php
Datei mit verglichen werden ?>
. Ich ende nie mit, ?>
hauptsächlich wegen des Risikos, Leerzeichen auszugeben, aber man könnte argumentieren, dass es die logische Sache wäre, die Datei mit zu beenden.
quelle
break
letzter Fall :)break
(oder einer anderen Steuerflussanweisung, die die beendetcase
) wird nach der letzten Alternative technisch benötigt.switch
Durchbrechen in vorhandenen Sprachen kannten und diese verhindern wollten. Die Regeln, die C # auferlegt, stimmen weitgehend mit den Empfehlungen aus meiner Antwort überein.break
als NO-OP behandeln, anstatt einenjmp
zur nächsten Anweisung zu generieren , richtig?In Anbetracht der Mehrdeutigkeit, die bei der Verwendung von
switch-case
in den meisten Sprachen besteht, würde ichbreak
bei der Verwendung vorschlagen, immer eine Anweisung zu verwenden, es sei denn, dies ist ausdrücklich und beabsichtigt unerwünscht .Dies liegt zum Teil daran, dass jeder
case
Anruf gleich aussieht, was meiner Meinung nach die Lesbarkeit verbessern würde. Es bedeutet aber auch, dass sich jemand (auch Sie),case
der zu einem späteren Zeitpunkt ein nach dem letzten einfügen möchte, nicht mit der Überprüfung des vorherigen Blocks befassen muss, was dazu beitragen kann, Fehler beim Hinzufügen von neuem Code zu reduzieren.quelle
case foo: case bar: ...
), möchte ich ausdrücklich, dass der Fall zustande kommt. Macht es viel klarer.// no break
anstelle vonbreak;
[[fallthrough]]
Attribut bei C ++.Es ist
break
nach dem letzten Fall nicht erforderlich . Ich benutze das Wort " last " (nicht Standard ), weil es nicht notwendig ist, Standard ist der letzte Fall.Und wir wissen, a
break
ist zwischen zwei aufeinanderfolgendencase
s notwendig . Manchmal verwende ichif(a!=0)
in meinem Code, um die Lesbarkeit zu verbessern, wenn andere auf meinen Code verweisen. Ich kann mich für die Verwendung entscheidenif(a)
, das wäre eine Frage meiner Wahlquelle
case
am Ende eine neue hinzufügt,switch
ohne zu überprüfen, ob diebreak
existiert (es wäre die Schuld des Programmierers, aber noch besser sicher - wenn aus irgendeinem Grund weil du in 6 Monaten dieser Programmierer sein könntest-),
am Ende von Arrays zu stehen, falls ein neuer Wert eingefügt wird. Das bricht jedoch einige Codes und sieht im Allgemeinen hässlich aus :),
. Incasedefault
wurde entwickelt, um der letzte Fall zu sein. Vielleicht würde die Sprache einbreak
danach als Fehler betrachten. Unter der Annahme ,break
wurde als Unterscheidungsmerkmal nur zwischen zwei Fällen erlaubt.