Expliziter else
Block
Ich bin damit nicht einverstanden, da dies eine pauschale Aussage ist, die alle Aussagen abdeckt if
, aber es gibt Zeiten, in denen es gut ist, einen else
Block aus Gewohnheit hinzuzufügen .
Eine if
Aussage deckt meines Erachtens tatsächlich zwei unterschiedliche Funktionen ab.
Wenn wir etwas tun sollen, tun Sie es hier.
Sachen wie diese offensichtlich nicht nicht einen benötigen else
Teil.
if (customer.hasCataracts()) {
appointmentSuggestions.add(new CataractAppointment(customer));
}
if (customer.isDiabetic()) {
customer.assignNurse(DiabeticNurses.pickBestFor(customer));
}
und in einigen Fällen darauf bestehen, eine else
mögliche Irreführung hinzuzufügen .
if (k > n) {
return BigInteger.ZERO;
}
if (k <= 0 || k == n) {
return BigInteger.ONE;
}
ist nicht dasselbe wie
if (k > n) {
return BigInteger.ZERO;
} else {
if (k <= 0 || k == n) {
return BigInteger.ONE;
}
}
obwohl es funktional das gleiche ist. Wenn Sie das erste if
mit einem Leerzeichen schreiben, erhalten else
Sie möglicherweise das zweite Ergebnis, das unnötig hässlich ist.
Wenn wir nach einem bestimmten Zustand suchen, ist es oft eine gute Idee, ein Leerzeichen hinzuzufügen else
, um Sie daran zu erinnern, dass diese Möglichkeit besteht
// Count wins/losses.
if (doors[firstChoice] == Prize.Car) {
// We would have won without switching!
winWhenNotSwitched += 1;
} else {
// We win if we switched to the car!
if (doors[secondChoice] == Prize.Car) {
// We picked right!
winWhenSwitched += 1;
} else {
// Bad choice.
lost += 1;
}
}
Denken Sie daran, dass diese Regeln nur gelten , wenn Sie neuen Code schreiben . IMHO Die leeren else
Klauseln sollten vor dem Einchecken entfernt werden.
Testen Sie für true
, nicht fürfalse
Auch dies ist ein guter Rat auf allgemeiner Ebene, aber in vielen Fällen macht dies Code unnötig komplex und weniger lesbar.
Auch wenn Code gefällt
if(!customer.canBuyAlcohol()) {
// ...
}
scherzt den Leser, macht es aber
if(customer.canBuyAlcohol()) {
// Do nothing.
} else {
// ...
}
ist mindestens so schlimm, wenn nicht schlimmer.
Ich habe vor vielen Jahren in BCPL codiert und in dieser Sprache gibt es eine IF
Klausel und eine UNLESS
Klausel, so dass Sie viel besser lesbar codieren können als:
unless(customer.canBuyAlcohol()) {
// ...
}
das ist deutlich besser, aber immer noch nicht perfekt.
Mein persönlicher Prozess
Wenn ich neuen Code schreibe, füge ich häufig einen leeren else
Block zu einer if
Anweisung hinzu, um mich daran zu erinnern, dass ich diese Möglichkeit noch nicht behandelt habe. Dies hilft mir, die DFS
Falle zu umgehen , und stellt sicher, dass ich beim Überprüfen des Codes feststelle, dass noch mehr zu tun ist. Normalerweise füge ich jedoch einen TODO
Kommentar hinzu, um den Überblick zu behalten.
if (returnVal == JFileChooser.APPROVE_OPTION) {
handleFileChosen();
} else {
// TODO: Handle case where they pressed Cancel.
}
Ich finde, dass ich else
im Allgemeinen selten in meinem Code verwende, da dies oft auf einen Codegeruch hinweisen kann.