Jawny else
blok
Nie zgadzam się z tym jako ogólne stwierdzenie obejmujące wszystkie if
stwierdzenia, ale zdarza się, że dodanie else
bloku z przyzwyczajenia jest dobrą rzeczą.
if
Oświadczenie, moim zdaniem, w rzeczywistości obejmuje dwie odrębne funkcje.
Jeśli mamy coś zrobić, zrób to tutaj.
Takie rzeczy oczywiście nie wymagają else
części.
if (customer.hasCataracts()) {
appointmentSuggestions.add(new CataractAppointment(customer));
}
if (customer.isDiabetic()) {
customer.assignNurse(DiabeticNurses.pickBestFor(customer));
}
aw niektórych przypadkach naleganie na dodanie else
może wprowadzić w błąd.
if (k > n) {
return BigInteger.ZERO;
}
if (k <= 0 || k == n) {
return BigInteger.ONE;
}
to nie to samo co
if (k > n) {
return BigInteger.ZERO;
} else {
if (k <= 0 || k == n) {
return BigInteger.ONE;
}
}
nawet jeśli jest funkcjonalnie taki sam. Pisanie pierwszego if
z pustym else
może doprowadzić do drugiego wyniku, który jest niepotrzebnie brzydki.
Jeśli sprawdzamy konkretny stan, często dobrym pomysłem jest dodanie pustego, else
aby przypomnieć o sytuacji
// 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;
}
}
Pamiętaj, że te zasady obowiązują tylko podczas pisania nowego kodu . IMHO Puste else
klauzule powinny zostać usunięte przed odprawą.
Testuj true
, a niefalse
Ponownie jest to dobra rada na poziomie ogólnym, ale w wielu przypadkach powoduje to, że kod jest niepotrzebnie złożony i mniej czytelny.
Mimo że kod podobny
if(!customer.canBuyAlcohol()) {
// ...
}
denerwuje czytelnika, ale robi to
if(customer.canBuyAlcohol()) {
// Do nothing.
} else {
// ...
}
jest co najmniej tak źle, jeśli nie gorzej.
I kodowane w BCPL wiele lat temu iw tym języku istnieje IF
klauzula iUNLESS
klauzula więc można kodować wiele bardziej czytelnie jako:
unless(customer.canBuyAlcohol()) {
// ...
}
co jest znacznie lepsze, ale wciąż nie idealne.
Mój osobisty proces
Zasadniczo, gdy piszę nowy kod, często dodaję pusty else
blok do if
instrukcji, aby przypomnieć mi, że nie opisałem jeszcze tej ewentualności. Pomaga mi to uniknąć DFS
pułapki i zapewnia, że kiedy przeglądam kod, zauważam, że jest więcej do zrobienia. Zazwyczaj jednak dodaję TODO
komentarz, aby śledzić.
if (returnVal == JFileChooser.APPROVE_OPTION) {
handleFileChosen();
} else {
// TODO: Handle case where they pressed Cancel.
}
Uważam, że generalnie else
rzadko używam w kodzie, ponieważ często może to wskazywać na zapach kodu.