Троичное назначение без выражения "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