Warum wird der imho fehlende Einzug der "case" - Schlüsselwörter in einer switch-Anweisung als guter Stil angesehen?
In etwa jeder IDE scheint kein Einzug des Schlüsselworts "case" die Standardformatierungsoption zu sein:
switch (i){
case 0:
break;
case 1:
break;
}
während ich dieses Format intuitiver finde:
switch (i){
case 0:
break;
case 1:
break;
}
Gibt es eine Logik dahinter, die mir entgeht?
Antworten:
Die Fälle sind logische Bezeichnungen. Viele Leute setzen Beschriftungen auf die gleiche Einrückungsstufe wie der Block, in dem sie sich befinden. Meiner Meinung nach ist es auf diese Weise einfacher, den Text durchzulesen.
Ich vergleiche es mit einer Zeitleiste, durch die Sie scrollen können. Sie haben Markierungen auf der Zeitachse selbst, die nicht in den Inhalt eingerückt sind. Sie können dann schnell darauf hinweisen, wo sich Beschriftungen / Markierungen befinden, ohne Ihr Auge von der Grundlinie abzuwenden.
quelle
switch
Blocks wird eine Ebene von sichswitch
selbst eingerückt , aber diecase
s werden eine Ebene von dem Code "entfernt", mit dem sie gemischt sind.case
Teile verhalten sich wie Beschriftungen, da der Ausführungsfluss durch die Beschriftung vom obigen Code zum folgenden Code ohne a verläuftbreak
. Ich sehe sie immer noch lieber eingerückt. Ohne den Einzug verbirgt es für mich dieswitch
Aussage selbst, was es schwierig macht, den Anfang der Dinge zu sehen. Dies ist jedoch nur dann ein echtes Problem, wenn es zu viele Fälle gibt und das ein ganz anderes Problem ist.case
s haben? Sie erhalten 2 schließende Klammern mit derselben Einrückungsstufe in verschiedenen Zeilen.In 4 Worten: keine Blöcke, keine Einrückung .
Fälle öffnen keinen Block. In C oder C ++ können Sie sogar Variablendeklarationen am Anfang des Schalterblocks einfügen (die Initialisierer werden jedoch nicht aufgerufen, außer bei statischen Variablen, das ist eine Gefahr). Sie können mit vielen seltsamen Dinge tun
switch
, wie Duff Gerät .Da Fälle nur Beschriftungen sind, erscheint das Einrücken nicht so intuitiv, und das Nichteinrücken ist der von den meisten Stilen gewählte Stil.
quelle
if-else
s vorstellen kann. Da sie jedoch wie Etiketten aussehen, ist die Einrückung auf diese Weise möglicherweise besser geeignet.switch
führt einen Block ein undcase
nicht. Und dochcase
scheint eine neue Ebene der Einrückung einzuführen, währendswitch
dies nicht der Fall ist.switch
führt selbst keinen Block ein. Es ist nur eine Blockanweisung, die normalerweise als abhängige Anweisung verwendet wird, die den Block einführt.Die offiziellen Oracle- Codekonventionen von 1999 für die Java TM -Programmiersprache (Abschnitt 7.8) empfehlen einen Switch-Stil, bei dem case-Anweisungen nicht relativ zur switch-Anweisung als Ganzes eingerückt werden.
Dies ist eine subjektive Entscheidung, aber Sun entschied, dass es besser ist, wenn sich alle an einen Stil halten, und entschied sich für diesen.
quelle
Es stehen verschiedene Einrückungsstile zur Auswahl. AFAIK, keiner gilt als besserer Stil als die anderen, solange Sie konsequent einen Einrückungsstil verwenden. Für mich Einrücken
case
Etiketten ist besser lesbar, gleiche gilt fürprivate
,protected
undpublic
Etiketten in Klassen, aber meine IDE wird die Einbuchtung meinen Weg nicht. Mein Code ist nicht so lesbar, wie ich es gerne hätte. Naja...quelle
Vielleicht ist es, die gleiche Einrückungsstufe
if
beizubehalten wie das logische Äquivalent, das in Aussagen ausgedrückt wird? Das ist:switch(i){ case 0: //do something 1 case 1: //do something 2 }
Würde ähnlich aussehen wie sein logisches Äquivalent:
if(i==0){ //do something 1 }else if(i==1){ //do something 2 }
quelle
FWIW, eine andere Option verwendet zwei halbe Einrückungen:
switch (i) { case 1: ... case n: ... }
quelle