Ява: троичная без возврата. (Для вызова метода) - PullRequest
43 голосов
/ 26 февраля 2012

Мне было интересно, можно ли сделать троичную операцию, но ничего не возвращать.

Если это невозможно в Java, возможно ли это на других языках, если да, то какие из них применимы?

name.isChecked() ? name.setChecked(true):name.setChecked(false);

Ответы [ 5 ]

48 голосов
/ 26 февраля 2012

Нет, вы не можете. Но какой смысл в этом высказывании if-else? Вы действительно пытаетесь сохранить 7 символов?

if (name.isChecked()) {
    name.setChecked(true);
} else {
    name.setChecked(false);
}

или, если вы предпочитаете плохой стиль:

if (name.isChecked()) name.setChecked(true); else name.setChecked(false);

Не берите в голову тот факт, что вы можете просто сделать (в данном случае):

name.setChecked(name.isChecked());

Смысл троичного или «условного» оператора состоит в том, чтобы вводить условные выражения в выражение . Другими словами, это:

int max = a > b ? a : b;

предназначен для краткости:

int max;
if ( a > b ) {
    max = a;
} else {
    max = b;
}

Если значение не создается, условный оператор не является ярлыком.

12 голосов
/ 26 февраля 2012

Мне было интересно, можно ли сделать троичную операцию, но ничего не возвращать.

Нет, это невозможно:

  1. 2-й и 3-й операнды должны быть не пустыми выражениями; то есть они должны производить какое-то фактическое значение.

    "Ошибка времени компиляции, когда второе или третье выражение операнда является вызовом пустого метода." - JLS 15.25 .

  2. Тернарное выражение является выражением и не может использоваться в качестве оператора.

    "Определенные виды выражений можно использовать в качестве операторов, следуя за ними через точку с запятой." ... и троичное выражение не относится к таким видам - ​​ JLS 14.8 .

Если вы действительно хотите использовать троичное выражение, но не используете значение выражения, то самое простое - назначить значение фиктивной переменной и добавить аннотацию, чтобы отключить предупреждение о том, что переменная не б.

Но лучше использовать простое выражение if.

Если это невозможно в Java, возможно ли это на других языках, если да, то какие из них применимы?

Я немного заржавел, но я считаю, что C, C ++ и Perl позволяют использовать произвольные выражения в местах, где их значения не используются.

5 голосов
/ 26 февраля 2012

Иногда вы можете использовать троичную операцию над аргументами метода для решения вашего запроса.

name.setChecked(name.isChecked() ? true : false);

Кстати, лучшее решение вашей проблемы -

name.setChecked(name:isChecked());
0 голосов
/ 20 декабря 2016

Вы должны вернуть какое-то значение, и оно не будет работать, если вы хотите, чтобы он действовал как метод void, который выполняет какое-то действие без возврата значения.

Надеюсь, это поможет ...

0 голосов
/ 26 февраля 2012

В Java следующий код невозможен:

(your-condition) ? (true-statements) : (false-statements)

для примера вы не можете скомпилировать следующий фрагмент кода:

(1==1) ? System.out.println("") : System.out.println("");

вы получаете следующую ошибку компиляции:

The left-hand side of an assignment must be a variable
...