JavaScript

Какой смысл от else if в JS?

Добрый день.
Зачем в JS "else if", если его можно заменить следующим образом? :
if (condition1) {

}

if (condition2) {

}
...

...также,
1) такое решение делает код более читабельным.
2) можно использовать switch/case.

Получается, else if бесполезен?
Наоборот, именно else if делает код боле читабельным. else if гарантирует, что будет выполнена только одна ветка из цепочки.

Банальный пример обработки значения по диапазонам - всего 3 сравнения:

if (v < 1000) {
...
} else if (v < 10000) {
...
} else if (v < 100000) {
...
} else {
...
}

Тот же самое без else if - 6 сравнений и 2 логических умножения, код понимать существенно сложнее, т. к. каждый if срабатывает независимо и требуются дополнительные усилия на анализ возможных пересечений диапазонов:

if (v < 1000) {
...
}
if (v >= 1000 && v < 10000) {
...
}
if (v >= 10000 && v < 100000) {
...
}
if(v >= 100000) {
...
}

Со switch получается ещё менее читабельно, чем даже с независимыми if. Использовать switch надо только для выборки варианта по индексу, а писать условные выражения в case - это грязный хак.
Алексей Гудзинский
Алексей Гудзинский
66 907
Лучший ответ
Алексей Толкачёв я не думаю, что эти проверки с && нужны и вообще обязательны.
если думать логически:
if (cond1) { . .} // код не сработал, переходим к следующей его части.
if (cond2) { . .} // код сработал.
на вкус и цвет все фломастеры - разные
Alexander Sauerwein
Alexander Sauerwein
57 938
Без else будет говнокод
Роман Шумилин
Роман Шумилин
60 268
Сравни
if(a==2) { ...}
else if( b==3 ){ ...}
и
if(a==2) { ...}
if( b==3 ){ ...}
в случае, когда a=2 и b=3

Когда найдешь отличия - возвращайся
идиот. condition1 и condition2 могут оба выполняться. а может требоваться, чтобы только первая ветвь выполнялась, если condition1

читабельность наоборот хуже - опять же благодаря таким вот комбинациям

switch-case слишком сложен
Алексей Толкачёв непонятно.
не будут ли эти два кода идентичны друг-другу.. ?:
if (condition1) {

}

if (condition2) {

}

if (condition1) {

} else if (condition2) {

}

ведь в 1 случае, пробел между двумя выражениями может означать else, а else можно трактовать как "если не сработало первое выражение, попробовать запустить следующее".
касательно читабельности - вот это условное ветвление является спагетти-кодом, никогда не использую такие варианты.
если нужно проверять на множество условий - switch/case, и в чем его сложность - тоже непонятно.