2013-03-06 2 views
0

В Java, у меня есть такое выражение, как следующее:Java тройной (встроенные) операторы: экранный Comparation переменные

return (a.getValue() > b.getValue()) ? a.getValue() : b.getValue(); 

Когда мне было около 13 лет, я использовал, чтобы закодировать в MSL (Mirc Scriptint Language) , Этот язык имел следующий тройной оператор:

return iif($valueOfA > $valueOfB, $v1, $v2); 

где $ v1 и v2 $ представляют $ valueOfA и $ valueOfB.

Я не нравится, что я должен назвать a.getValue() и b.getValue() в два раза, а также это очень некрасиво (и ломает точку инлайн оператора):

valA = a.getValue(); 
valB = b.getValue(); 
return (valA > valB ? valA : valB); 

Так я ищу что-то вроде этого:

return (a.getValue() > b.getValue) ? [param1] : [param2]; 
+0

Здесь вы можете просто уйти с 'Math.max'. Но серьезно: в Java приходится полагаться на компилятор (hotspot). Таким образом, это помогает сделать методы окончательными. Другой язык: 'let av = a.getValue(), bv = b.getValue() в av> bv?av: bv'. –

ответ

3

Что-то вроде:

return ((a.getValue() > b.getValue()) ? a : b)).getValue(); 

Могли бы уже помогает. Кроме того, можно реализовать некоторые метод в & классов B сравнить «A» и «B» напрямую, чтобы иметь возможность написать что-то вроде:

return ((a.greaterThan(b)) ? a : b).getValue(); // no operator overload in Java 

Кроме того, если вы используете объекты, возможно, возвращая или b (а не их «ценность») было бы лучшей идеей.

Это зависит от конечно классов и обычаев, которые вы делаете от «a» и «b».

+0

Просто обратите внимание, что если вы не выполнили второй подход, вы все равно вызываете 'getValue()' дважды и 'return ((a.getValue()> b.getValue()): a) b)) getValue();' в основном то же самое, что и 'return (a.getValue()> b.getValue())? a.getValue(): b.getValue(); '- это просто ** выглядит ** по-разному. –

2

Так что я искал что-то вроде этого: возвращения (a.getValue()> b.getValue)? [param1]: [param2];

Язык Java четко определен. Поиск ненужной функции бесполезен. Или сделать вещи простыми «нет».

И как комментарий, это:

iif($valueOfA > $valueOfB, $v1, $v2); 

не оператор. Это может быть макрос, функция, метод, но не оператор.

1

Как насчет этого?

int x, y; 
int result =((x = a.getValue()) > (y = b.getValue())? x: y); 

Приведенный выше пример:

  1. Создает два целочисленных переменных (или любой другой тип вы хотите).
  2. В тройной операции присваивается значение a.getValue() для x и b.getValue() для y.
  3. Выполняет проверку и возвращает переменную в соответствии с условием.
+0

+1, за короткий путь :) – Azad

Смежные вопросы