Тернарный оператор возвращает значения - PullRequest
0 голосов
/ 16 апреля 2020

x>5 ? list1.add(something) : list2.add(something);

Почему я должен брать возвращаемое значение из выражений тернарного оператора? Я должен иметь возможность игнорировать возвращаемое значение.

Это заставляет меня принять возвращаемое значение, как показано ниже

boolean y = x>5 ? list1.add(something) : list2.add(something);

Ответы [ 4 ]

3 голосов
/ 16 апреля 2020

Условный оператор ?: создает выражение (что означает, что это бит синтаксического дерева, который имеет значение при выполнении). Однако это не выражение оператора , означающее, что вы не можете просто добавить ; в его конец, чтобы создать оператор.

Примерами выражений операторов являются вызовы методов, конструктор вызовы, пре / постинкрементные. Они имеют смысл выступать в качестве заявления, потому что они имеют (или могут иметь) побочные эффекты. Вы можете взять выражение i++, добавить точку с запятой i++;, и у вас будет действительное, значимое утверждение.

Необъявительные выражения, такие как сложение 1 + 2, сами по себе не имеют смысла. Это как сказать «кот и собака»: это не «целое предложение». Условный оператор создает что-то вроде «если дождь, тогда кошка еще собака», что тоже не имеет особого смысла.

Если вы захотите написать условное выражение в качестве выражения, просто используйте if / else заявление вместо.

3 голосов
/ 16 апреля 2020

По той же причине вы не можете сделать 1 + 1; самостоятельно: потому что выражение само по себе не является выражением (как говорит само сообщение об ошибке).

2 голосов
/ 16 апреля 2020

Условный оператор является частью выражения, что означает, что его цель должна быть оценена. Если вы не пытаетесь получить значение, вам не следует использовать условный оператор. Вот для чего нужны if операторы.

Хотя в этом случае, похоже, вы могли бы достичь желаемого эффекта, используя:

(x > 5 ? list1 : list2).add(something);
0 голосов
/ 16 апреля 2020

Поскольку условный оператор (? :) возвращает одно из двух значений в зависимости от значения логического выражения.

Он не выполняется, поскольку является выражением, а не оператором.

...