Оператор возврата в условном операторе

У меня есть сегмент кода следующим образом:

if(a < b)
{
x = y;
return w;
}
/* all unrelated variables above*/
x = something;
y = something;
/*both x and y from above*/

x и y являются глобальными переменными, и они изменяются внутри части if, мне нужно присвоить y x и затем вернуть w или просто константу.

Мне нужно использовать троичный оператор для замены части if:

Я попробовал следующее:

return (((a < b) ? (x = y, w) : 1), (x = something, y = something));

Но я, кажется, не получаю желаемого результата. Я знаю, что это неправильно. Это потому что я использовал вернуть от подобного выражения, то есть:

if(x < y)
return (x = y);
return 1;

Который я написал как:

return ((x < y) ? x = y : 1);

Но как мне вернуть значение, которое включает в себя предварительное присвоение совершенно другой переменной в троичном операторе?

0

Решение

Решение, предложенное Mankarse:

return (a < b) ? (x = y, w) : (x = something, y = something, z);

На самом деле эквивалентно:

if (a < b) {
x = y;
return w;
}
/* all unrelated variables above*/
x = something;
y = something;
return z;

Второе возвращение важно.

Вы не можете условно вернуться из середины выражения, потому что return — это оператор, вы должны вернуть все выражение. Так что это действительно зависит от того, как вы хотите продолжить после назначения на y. Или, если вам действительно нужно изменить порядок выполнения в середине выражения, вы можете сгенерировать исключение, но это, я думаю, было бы слишком сложно в этом случае.

2

Другие решения

Поместите блок кода внутри функции.

function f(){
x = y;//assumes x, y and w are global.
return w;
}

Затем используйте функцию в условном выражении.

(a < b) ? f() : "value to return if a>=b";

Вам не нужно ставить return перед условным оператором, поскольку автоматически возвращает 1 из значения, зависит от оценки условия.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector