Expliziter elseBlock
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 elseBlock aus Gewohnheit hinzuzufügen .
Eine ifAussage 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 elseTeil.
if (customer.hasCataracts()) {
appointmentSuggestions.add(new CataractAppointment(customer));
}
if (customer.isDiabetic()) {
customer.assignNurse(DiabeticNurses.pickBestFor(customer));
}
und in einigen Fällen darauf bestehen, eine elsemö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 ifmit einem Leerzeichen schreiben, erhalten elseSie 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 elseKlauseln 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 IFKlausel und eine UNLESSKlausel, 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 elseBlock zu einer ifAnweisung hinzu, um mich daran zu erinnern, dass ich diese Möglichkeit noch nicht behandelt habe. Dies hilft mir, die DFSFalle 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 TODOKommentar hinzu, um den Überblick zu behalten.
if (returnVal == JFileChooser.APPROVE_OPTION) {
handleFileChosen();
} else {
// TODO: Handle case where they pressed Cancel.
}
Ich finde, dass ich elseim Allgemeinen selten in meinem Code verwende, da dies oft auf einen Codegeruch hinweisen kann.