Verwenden Sie ein "Goto" in einem Schalter?
Habe ich gesehen, dass ein vorgeschlagener standard zur Codierung liest Never use goto unless in a switch statement fall-through
.
Ich nicht Folgen. Was genau würde diese "Ausnahme" - Fall so Aussehen, dass rechtfertigt eine goto
?
InformationsquelleAutor der Frage Brent Arias | 2011-01-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieses Konstrukt ist illegal in C#:
In C++, es würde laufen beide Linien, wenn
variable = 2
. Es kann beabsichtigt sein, aber es ist zu einfach, zu vergessenbreak;
am Ende der ersten Fall-label. Aus diesem Grund haben Sie es illegal in C#. Um imitieren das fallen durch Verhalten, müssen Sie explizitgoto
zum Ausdruck bringen Ihre Absicht:Das heißt, es gibt ein paar Fälle wo
goto
ist eigentlich eine gute Lösung für das problem. Nie schalten Sie Ihr Gehirn mit "niemals etwas" Regeln. Wenn es waren zu 100% nutzlos, es würde nicht existiert haben, in der Sprache, in den ersten Platz. Verwenden Sie nichtgoto
ist ein Leitlinie; es ist nicht ein Gesetz.InformationsquelleAutor der Antwort Mehrdad Afshari
C# weigert sich zu lassen, fallen durch implizit (es sei denn, es ist kein code in der Tasche) wie in C++: Sie müssen zu gehören
break
. Zu explizit fallen durch (oder zu springen, um allen anderen Fällen) können Siegoto case
. Da es keinen anderen Weg, um dieses Verhalten, die meisten (vernünftigen) Kodierung Normen es zulassen.Einem realistischen Beispiel (auf Anfrage):
InformationsquelleAutor der Antwort Zooba
Dies ist ordentlicher
Als diese (vor allem, wenn Sie tun mehr Arbeit in Quit())
InformationsquelleAutor der Antwort djeeg
Es ist der einzige Weg, die C# können Sie eine switch-case "fallthrough'. In C# (im Gegensatz zu C, C++ oder Java), ein case-block in einer switch-Anweisung muss mit einem
break
oder etwas anderes ausdrücklich jump-Anweisung.InformationsquelleAutor der Antwort Michael Burr
Neben der Verwendung
goto case
können Siegoto
eine Bezeichnung, die in einem anderen Fall-Klausel:Diese Weise können Sie springen zu einem anderen Fall-Klausel, ohne sich Gedanken über den Wert oder die Art des Ausdrucks.
Irgendeine Art von expliziten "fallthrough" Schlüsselwort, die ersetzt werden kann für
break
wäre schön gewesen, wenn...InformationsquelleAutor der Antwort Robert T. Adams
Durch eine Erweiterung von Mehrdad Afshari Ratschläge oben, würde ich nie befürworten, einfach ins Exil zu schicken, ein Konstrukt wie "schlechter code" oder "schlecht Codierung der Praxis'. Sogar die 'goto' - Anweisung haben Ihren Platz in den großen Plan der Dinge. Das dogma, dass Sie böse ist nicht gekommen, um zu übergeben, da der inhärente Fehler in das Konstrukt - es war, weil Sie sehr stark (und schlecht) eingesetzt.
In jedem Fall, Kernighan und Ritchie fühlte, dass ein Fall, zu fallen, war, den richtigen Weg zu gehen. Ehrlich gesagt, ich bin eher geneigt zu Vertrauen, Ihre Argumentation ist als alles, das könnte unter Umständen kommen aus jeder Geist in ganz Redmond, Washington. Oder Dogmen, basiert auf der Weisheit von irgendeinem Geist in Redmond.
Wenn Sie jemals hören können 'verwenden Sie Niemals xxx', geistig anfügen, dass mit 'ohne Ursache'. Nur werfen Sie heraus, alles, was dogmatisch ist lächerlich. Geräte gibt es, weil es einen Grund gab, um Sie zu machen. Sie sind, im Nachhinein, in der Regel bezeichnet als 'schlecht' nicht, weil jeder Fehler im Gerät selbst, sondern eher, weil Sie beschäftigt waren schlecht die Leute nicht ganz verstehen. So, das Gerät ist kaum jemals "schlecht". Was ist fast immer schlecht ist user Verständnis. Dies gilt auch von Kernspaltung und fusion.
Ich habe gesehen, entsetzlich grotesken code-Strukturen, deren einzige Aufgabe es war, zu vermeiden, die Verwendung einer 'goto' - Anweisung. Was ist schlimmer? "goto [label]", - oder 30 Zeilen von widerlichem code, dessen Funktion es ist zu vermeiden, geben Sie "goto [label]"?
Wissen suchen, bevor dogma. Denken, bevor Sie handeln. Diese sind nützliche Tipps.
InformationsquelleAutor der Antwort David Wright