Рассмотрим 3 сценария
Сценарий 1: Логическое условие
if (condition) {}
else {}
Указание условия как-бы иначе было бы избыточным, и для читателя действительно очевидно, что делает код. В этом случае нет аргумента для использования else.
Сценарий 2: Бесконечные состояния
Здесь мы заинтересованы в проверке условий A и B (и т. Д.), И нас может интересовать или не интересоваться тем, что происходит, если ни одно из них не выполняется:
if (conditionA) {}
else if (conditionB) {}
else {} // this might be missing as it is in your case
Важным моментом здесь является то, что не существует конечного числа взаимоисключающих состояний, например: условие A может быть num % 2 == 0
, а условие B может быть num % 3 == 0
.
Я думаю, что здесь естественно и желательно использовать разумное количество веток; если веток становится слишком много, это может указывать на то, что некоторое разумное использование дизайна ОО приведет к значительному улучшению удобства обслуживания.
Сценарий 3: Finite states
Это золотая середина между первыми двумя случаями: число состояний конечно, но больше двух. Тестирование значений перечислимого типа является типичным примером:
if (var == CONSTANT_FOO) {}
else if (var == CONSTANT_BAR) {} // either this,
else {} // or this might be missing
В таких случаях использование переключателя, вероятно, лучше, потому что он сразу сообщает читателю, что число состояний конечно, и дает сильный намек на то, где может быть найден список всех возможных состояний (в этом примере начинающиеся константы с CONSTANT_). Моими личными критериями является количество состояний, с которыми я проверяю: если это только одно (нет больше, если), я буду использовать if; в противном случае, переключатель. В любом случае я не буду писать еще, если в этом сценарии.
Добавление else как пустой блок catch-errors
Это напрямую связано со сценарием № 2 выше. Если возможные состояния не являются конечными и известны во время компиляции, вы не можете сказать, что «в любом другом случае» означает, что произошла ошибка. Учитывая, что в сценарии № 2 переключение будет более естественным, я чувствую, что использование этого способа имеет неприятный запах кода.
Вместо этого используйте переключатель с веткой по умолчанию. Он сообщит ваши намерения гораздо яснее:
switch(direction) {
case 'up': break;
case 'down': break;
default: // put error handling here if you want
}
Это может быть немного более многословно, но читателю ясно, как должен функционировать код. На мой взгляд, пустой блок else будет выглядеть неестественно и загадочно.