Троичное назначение без выражения "else"

Можно ли использовать сокращение для троичных выражений присваивания типа

boolean x = false;
// ... code ...
a = x ? b : a;   // Assigning a to a is pointless
a += x ? 1 : 0;  // Adding 0 to a is pointless

Я думаю что-то вроде

a = x ? b;   // Assign b to a if x is true
a += x ? 1;  // Add 1 to a if x is true

Не то, чтобы это экономило много печатания, мне просто любопытно, если что-то подобное существует. Я недавно обнаружил в PHP 7 оператор null coalesce, который делает нечто похожее. Для меня это выглядит намного чище, чем

if( x ) a = b;
if( x ) a += 1;

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

1 ответ

К сожалению, это не поддерживается Java.

Из официального документа оракула:

Другим условным оператором является?:, Который можно рассматривать как сокращение для оператора if-then-else (обсуждается в разделе "Операции потока управления" этого урока).
Этот оператор также известен как троичный оператор, потому что он использует три операнда.
В следующем примере этот оператор должен читаться как: "Если someCondition имеет значение true, присвойте значение value1 результату. В противном случае присвойте значение value2 результату".

Следующая программа, ConditionalDemo2, проверяет оператор?:

class ConditionalDemo2 {

    public static void main(String[] args){
        int value1 = 1;
        int value2 = 2;
        int result;
        boolean someCondition = true;
        result = someCondition ? value1 : value2;

        System.out.println(result);
    }
}

Поскольку someCondition имеет значение true, эта программа выводит "1" на экран.
Используйте оператор?: Вместо оператора if-then-else, если он делает ваш код более читабельным;
например, когда выражения компактны и не имеют побочных эффектов (таких как присваивания).

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html

Другие вопросы по тегам