Почему if нельзя напрямую присвоить константе?
Структура if
if (условие) {
инструкция1;
} else {
инструкция2;
}
Структура тернарного оператора
условие ? выражениеЕслиTrue : выражениеЕслиFalse
Структура функции
function имя (параметр) {
инструкция;
}
И if, и тернарный оператор — условные операторы, но во втором случае есть возможность присвоения константе напрямую.
Мы могли бы сказать, что if невозможно присвоить константе напрямую, поскольку внутри if, в отличие от тернарного оператора, находятся не выражения, а инструкции — они ничего не возвращают.
Но внутри функции также находятся инструкции и при этом, используя оператор return, мы можем вернуть значение и присвоить его константе.
Почему же мы не можем, используя return внутри if, присвоить значение константе?
Ответы (2 шт):
К сожалению, таков синтаксис языка — expressions возвращают значения (в том числе вызов функции), statements (в том числе объединённые в блок) не возвращают значения, поэтому их результат нельзя присвоить.
Но скоро вы сможете делать что-то похожее, если это предложение войдёт в стандарт:
return можно использовать только внутри функций, а if - не функция)
Честно: Не могу придумать реальный пример (кроме как "захотелось"), когда такой синтаксис был бы правда необходим. Более того, если и внутри if, и внутри else что-то очень длинное и сложное, вероятно, стоит завернуть каждый исход в отдельную функцию.
Варианты решения «Проблемы»:
let x = 15;
const y = (x > 0) ? f(x) : g(x);
console.log(y);
/***/
function f(x) { // Что-то сложное и многострочное;
return x * x + 10;
}
function g(x) { // Что-то сложное и многострочное;
return x * x * x;
}
let x = 15;
const y = handler(x);
console.log(y);
/***/
function handler(x) {
if(x > 0) {
// что-то из нескольких строчек
return x * x + 10;
}
// Если верхний return сработал, дело уже не дойдет сюда. Можно без else.
return x * x * x;
}