Betrachten Sie diesen Code:
if (x == 1)
{
throw "no good; aborting" ;
}
[... more code ...]
Betrachten Sie nun diesen Code:
if (x == 1)
{
throw "no good; aborting" ;
}
else
{
[... more code ...]
}
Die beiden Fälle funktionieren genauso. Der erste Fall hat den Vorteil, dass Sie den Rest des Codes nicht in ein "einschließen" müssen else
. Die zweite hat den Vorteil, der Praxis zu folgen, explizit eine else
für jeden zu haben if
.
Kann jemand solide Argumente für das eine über das andere liefern?
coding-style
exceptions
rlandster
quelle
quelle
else
scheint falsch zu sein. Sehr oft gibt es einfach nichts in denelse
Block zu legen , es sei denn, Sie biegen sich nach hinten.if
brauchtelse
. Der letzte Programmierer, der an unserer Codebasis gearbeitet hat, folgte dem streng (na ja , manchmal ... es ist irgendwie schizophren ). Infolgedessen haben wir viele völlig bedeutungsloseelse { /* do nothing */ }
Blöcke, die den CodeAntworten:
Sie sollten nicht hinzufügen ,
else
nachdemif
Zweige , dass Bruchkontrolle fließen bedingungslos , wie diejenigen ein , enthaltendthrow
oder einreturn
. Dies würde die Lesbarkeit Ihres Programms verbessern, indem die unnötige Verschachtelungsebene, die durch denelse
Zweig eingeführt wird, beseitigt wird .Was mit einem einzigen mehr oder weniger in Ordnung aussieht,
throw
wird wirklich hässlich, wenn mehrere Würfe hintereinander entfaltet werden:Dieses Snippet macht dasselbe, sieht aber viel besser aus:
quelle
else if
.if
Test für eine einzelne Bedingung und behandelt sie, wenn die Bedingung wahr ist, und wenn es keine alternative Sache gibt, die passieren muss, wenn die Bedingung falsch ist, sindelse if
s unnötig. In meinem Büro gibt es einen Begriff für Code wie dasblinkenlights erstes Snippet: " Pachinko- Maschinen".else
.Ich würde die "explizite else" -Praxis, die Sie als Anti-Pattern bezeichnen, nennen, da sie die Tatsache verdeckt, dass es keinen Sonderfallcode als else für Ihr if gibt.
Die Lesbarkeit / Wartbarkeit wird im Allgemeinen verbessert, wenn Sie meist nur die erforderlichen Code-Flow-Konstrukte haben und diese minimieren. Dies bedeutet redundante andere und wenn es eine ganze Funktion um einen Bereich erweitert, wird es schwieriger, sie zu verfolgen und zu warten.
Angenommen, Sie haben diese Funktion:
Jetzt besteht die Anforderung darin, dass Sie während der Konfiguration auch den Typ / Typ-Index des Oblogons angeben sollten. Es gibt mehrere Bereiche, in denen jemand diesen Code platzieren und mit ungültigem Code enden könnte, d. H.
Vergleichen Sie dies damit, ob der ursprüngliche Code mit minimalen erforderlichen und minimierten Kontrollflusskonstrukten geschrieben wurde.
Es wäre jetzt weitaus schwieriger, versehentlich etwas in den falschen Bereich zu bringen oder Bereiche aufzublähen, die zu einer Verdoppelung des langfristigen Wachstums und der Aufrechterhaltung dieser Funktion führen. Außerdem ist es offensichtlich, welche möglichen Flüsse durch diese Funktion fließen, sodass die Lesbarkeit verbessert wird.
Ich weiß, das Beispiel ist ein bisschen erfunden, aber ich habe es schon oft gesehen
Die Formalisierung dieser Regeln über Kontrollflusskonstrukte kann den Leuten helfen, die Intuition zu entwickeln, die notwendig ist, um etwas zu riechen, wenn sie anfangen, solchen Code zu schreiben. Dann werden sie anfangen zu schreiben ..
quelle