Явний else
блок
Я не погоджуюсь з цим, як простією заявою, що охоплює всі if
твердження, але бувають випадки, коли додавання else
блоку за звичкою - це добре.
На if
мій погляд, твердження, насправді, охоплює дві різні функції.
Якщо нам належить щось зробити, зробіть це тут.
Такі речі, очевидно, не потребують else
частини.
if (customer.hasCataracts()) {
appointmentSuggestions.add(new CataractAppointment(customer));
}
if (customer.isDiabetic()) {
customer.assignNurse(DiabeticNurses.pickBestFor(customer));
}
а в деяких випадках наполягати на додаванні else
може ввести в оману.
if (k > n) {
return BigInteger.ZERO;
}
if (k <= 0 || k == n) {
return BigInteger.ONE;
}
це НЕ те ж саме,
if (k > n) {
return BigInteger.ZERO;
} else {
if (k <= 0 || k == n) {
return BigInteger.ONE;
}
}
навіть якщо він функціонально однаковий. Запис першого if
з порожнім else
може призвести до другого результату, який є надмірно некрасивим.
Якщо ми перевіряємо конкретний стан, часто корисно додати порожнє, else
щоб нагадати, щоб приховати цю подію
// 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;
}
}
Пам'ятайте, що ці правила застосовуються лише тоді, коли ви пишете новий код . IMHO Порожні else
пропозиції повинні бути видалені перед реєстрацією.
Тест на true
, а не наfalse
Знову ж, це корисна порада на загальному рівні, але в багатьох випадках це робить код надмірно складним і менш читабельним.
Хоча код, як
if(!customer.canBuyAlcohol()) {
// ...
}
жартує читача, але робить його
if(customer.canBuyAlcohol()) {
// Do nothing.
} else {
// ...
}
принаймні так само погано, якщо не гірше.
Я закодований в BCPL багато років тому , і в цій мові є IF
пункт іUNLESS
положення , щоб ви могли закодувати набагато більш читані , як:
unless(customer.canBuyAlcohol()) {
// ...
}
що значно краще, але все ще не ідеально.
Мій особистий процес
Як правило, коли я пишу новий код, я часто додаю порожній else
блок до if
заяви, щоб нагадати мені, що я ще не висвітлював цю подію. Це допомагає мені уникнути DFS
пастки і гарантує, що при перегляді коду я помічаю, що робити ще багато чого. Однак я зазвичай додаю TODO
коментар, щоб відстежувати.
if (returnVal == JFileChooser.APPROVE_OPTION) {
handleFileChosen();
} else {
// TODO: Handle case where they pressed Cancel.
}
Я вважаю, що зазвичай else
в коді я використовую рідко, оскільки це часто може вказувати на запах коду.