In einem Code, den ich gerade schreibe, habe ich ungefähr Folgendes:
if (uncommon_condition) {
do_something_simple();
} else {
do();
something();
long();
and();
complicated();
}
Ein Teil von mir denkt: "Es ist in Ordnung, wie es geschrieben steht. Einfache Fälle sollten an erster Stelle stehen, und kompliziertere Fälle sollten an nächster Stelle stehen." Aber ein anderer Teil sagt: "Nein! Der else
Code sollte unter dem stehen if
, weil er if
für ungewöhnliche Fälle und else
für alle anderen Fälle gedacht ist." Was ist richtig oder besser?
coding-style
EMBLEM
quelle
quelle
Antworten:
Reihenfolge nach der Wahrscheinlichkeit der Ausführung. Die häufigste, wahrscheinlichste usw. Erkrankung sollte an erster Stelle stehen.
Die "Schwierigkeit, mit ihnen umzugehen" sollte durch Codestruktur, Abstraktion usw. behoben werden. In dem Beispiel könnte der else-Block auf einen einzelnen Methodenaufruf umgestaltet werden. Sie möchten, dass sich Ihre
if
Klauseln auf derselben abstrakten Ebene befinden.quelle
not
. Persönlich würde ich mich darauf konzentrieren,not
Bedingungen zu vermeiden . Es wurde nachgewiesen, dass sie eine höhere kognitive Belastung für das Verständnis hervorrufen als "positive" Bedingungen und die Lesbarkeit / Verständlichkeit von Code beeinträchtigen. Ich neige dazu, sie nur in Schutzaussagen zu verwenden.doesNotAllowxxFiles = false
.if(! doesNotAllowxxFiles)
Versuchen Sie, die Lesbarkeit zu verbessern. Eine Möglichkeit besteht darin, den längeren Codeblock in den else-Teil einzufügen.
ist besser lesbar als
quelle
Keine feste Regel als solche Ich hörte über die Verwendung, aber ich folge wie folgt
Aber wenn beide die gleiche Funktion mit unterschiedlichen Eigenschaften haben, sollten Sie sich zuerst für ungewöhnlich und dann für gewöhnlich entscheiden, damit Sie eine Anweisung speichern können.
Für den obigen Code lautet der Assembler-Code ungefähr so:
Wenn Bedingung innen wenn wahr ist, dann ist Fluss 1-> 2 (4 Anweisungen)
WENN Bedingung innen wenn falsch ist, dann ist Fluss 1-> 3 (3 Anweisungen)
Deshalb ist es besser, ungewöhnliche oder selten auftretende Ereignisse in einen normalen Zustand zu versetzen, damit wir jedes Mal eine Anweisung speichern können ;-)
quelle
Ich habe festgestellt, dass das genau entgegengesetzte Muster zu einem einfacheren Lesen des Codes führt und verschachtelte if-Anweisungen reduziert oder eliminiert. Ich bezeichne dies als "Handschuhmuster". (Beim Geschichtenerzählen ist ein Handschuh eine Reihe von Herausforderungen, die erfolgreich gemeistert werden müssen, bevor die endgültige Aufgabe abgeschlossen ist.) Wenn Sie zuerst Ihre Randfälle bearbeiten , können Sie sicherstellen, dass der Hauptteil Ihres Codes sauber und präzise ist:
quelle
Für mich geht es mehr um die Bedingungen als um die Komplexität des Codes, den sie ausführen. Sie müssen die Bedingungen so anordnen, dass zuerst ungewöhnliche Bedingungen und dann die häufigeren Bedingungen erfasst werden. Wenn der else-Code wirklich lang und kompliziert ist, würde ich wahrscheinlich ein Sub dafür machen, um den bedingten Teil für den Leser offensichtlich zu halten.
quelle
Ich habe keine feste Regel, aber im Allgemeinen befolge ich diese - überlegen Sie zunächst, wo ein fehlendes Entwurfsmuster vorhanden ist, das dies auslöst. Wenn nicht, schreibe ich es so, dass die Bedingung im if am klarsten verstanden wird. Das heißt, Doppel-Negative und ähnliches vermeiden.
quelle
Für solche Szenarien gibt es keine Daumenregel. Aber möglicherweise können wir folgen, um den positiven oder wahrscheinlichsten Code im if-Block zu schreiben und im else-Block oder in Standardfällen wegzulassen.
quelle