Зачем нужны ветки else в языках программирования?
Помогите разобраться. Допустим, есть такое условие:
function x (x) {
if (x <= 14){
return 'true';
}
else return 'false';
}
console.log(x(7));
console.log(x(714);
Понятно, что можно написать:
function x (x) {
if (x <= 14){
return 'true';
}
return 'false';
}
console.log(x(7));
console.log(x(714));
и этот код будет аналогично работать.
Другой пример: Пусть нам надо узнать, какое из двух чисел k и n больше. Мы сможем написать:
function greater (n, k){
if (n > k ) return n +' greater then ' + k + '\r\n';
else if (n < k) return k +' greater then ' + n + '\r\n';
else return k + ' = ' + n;
}
Но мы также можем написать:
function greater (n, k){
if (n > k ) return n +' greater then ' + k + '\r\n';
if (n < k) return k +' greater then ' + n + '\r\n';
return k + ' = ' + n;
}
И все будет работать.
Зачем тогда нужны else-if и else, если первые можно заменить просто вторым if, а вторые - обычным return или кодом в теле функции ниже if с последующим return результата? Такие условия работают быстрее, чем обычные if? С ними просто удобнее читать код? Или есть другие причины?
Добавляю больше рассуждений если у вас есть один if-else вы можете заменить его на
if {
// обработка;
return res;
};
// обработка 2 ветки
return res;
Если условий много, то их обычно пишут через else if, но если мы не проварились в первый if то выполнение кода идет ниже в любом случае, то есть можно просто написать другой блок if ниже. Если ни одно из условий "каскада" не выполнилось, то ставят блок else который можно заменить на обработку и return "по умолчанию"
Так как в этом примере все условия разные, то и обработка при входе в них тоже должна быть разная, то есть код мы не дублируем.
Ответы (2 шт):
if condition then
///
else
///
end
Эквивалентно (если у condition нет побочных действий)
if condition then
///
end
if not condition then
///
end
Очевидно, что во втором случае нужно писать больше, код становится более нагруженным. Становится сложнее разобраться, могут ли оба условных оператора выполниться вместе или выполняется всегда какой-то один. Придётся дважды вычислять condition. Если выражение condition вычислительно затратно, нужно тогда выносить его куда-то отдельно, а это ещё больше кода.
if condition1 then
///
elseif condition2
///
end
Эквивалентно
if condition1 then
///
else
if condition2 then
///
end
end
Считайте наличие elseif синтаксическим сахаром, который позволяет уменьшить вложенность условия.
Насколько я помню, в assembler вообще нет конструкции else, там всё делается переходами условными и безусловными. Что-то типа такого на псевдокоде, настоящий ассемблер я уже слабо помню:
проверить условие
переход, если истина на метка1
код, который нужно выполнить при невыполнении условия
безусловный переход на метка2
метка1:
код, который нужно выполнить при выполнении условия
метка2:
дальнейший код
Так что как бы на нижнем уровне никакой else и не нужен. Но он всё-таки удобен, поэтому в языках высокого уровня он используется. Например, в случае сложного условия:
if условие1 и (условие2 или условие3) и не условие4
код при выполнении условия
else
код при невыполнении условия
Если бы не было конструкции else, вам бы тут пришлось повторять все условия:
if условие1 и (условие2 или условие3) и не условие4
код при выполнении условия
if не (условие1 и (условие2 или условие3) и не условие4)
код при невыполнении условия
И это бы часто приводило к каким-то ошибкам. Любая лишняя копипаста - повод для ошибок, принцип DRY придуман не просто так. Да, можно было бы сохранить результат проверки в отдельную переменную и проверять только её, это было бы короче, но зачем множить переменные и их проверки, если можно использовать else?