Что такое эффективный if / else в Java? - PullRequest
2 голосов
/ 27 октября 2011

Я пытаюсь вернуть другое значение, используя простой if / else для проверки четного числа в Java.

if (move % 2 == 0) {
    return "o";
} else {
    return "O";
}

Я знаю, что в JavaScript вы можете использовать

if () : a ? b ;

Может ли это быть использовано в Java?

Ответы [ 7 ]

12 голосов
/ 27 октября 2011

Да, вы можете использовать троичный оператор в Java:

return (move % 2 == 0) ? "o" : "O";

Только не ожидайте, что это будет быстрее, чем if - else.

3 голосов
/ 27 октября 2011

Да, вы можете использовать условный оператор в Java:

return (move % 2 == 0) ? "o": "O";

Это не сделает вашу программу быстрее, но она будет немного лаконичнее, и если вы знакомы с условным оператором, вам, вероятно, будет легче читать.

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

1 голос
/ 28 октября 2011

Вместо «оптимизации» if по сравнению с троичным оператором ? вы должны сосредоточиться на move % 2 == 0.Если move является целым числом, а не переменной с плавающей запятой, то может быть быстрее:

if( move & 1 == 0 )
    return "E";
else
    return "O";

Битовые операции обычно выполняются быстрее, чем вычисления деления или по модулю.

1 голос
/ 27 октября 2011

Да, вы можете.Это называется троичный оператор

Использование:

  true ? case1 : case2;              // returns case1
  false ? case1 : case2;             // returns case2
0 голосов
/ 28 октября 2011

Если вам действительно нужно, чтобы это было ослепительно быстро, что довольно сомнительно, вам следует также рассмотреть таблицу соответствия:

static final char[] moveChar = {"o", "O"};
// ...
return moveChar[move % 2];

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

0 голосов
/ 27 октября 2011

Нет способа использовать оператор if более или менее эффективно.

... и еще больше - имейте это в виду, и это относится не только к операторам if:

Вы должны никогда пытаться оптимизировать используемые выражения, из соображений производительности - написать код, который фокусируется на удобочитаемости (а в смысле на удобстве обслуживания). Причина этого в том, что существует JIT (Just-in-time компилятор), который оптимизирует байт-код и изменяет инструкции, которые вы указали в своем байт-коде.

Если вы думаете об использовании троичного оператора, подумайте, не приведет ли это к тому, что код станет труднее понять (если над кодом работают несколько человек). Если вы просто работаете над кодом, тогда делайте как хотите - и да:

Object var = boolean-expression ? some-value : another-value;

намного компактнее, чем:

Object var;
if (boolean-expression)
   var = some-value;
else
   var = another-value;
0 голосов
/ 27 октября 2011

(conditional) ? if-true-statement : if-false-statement;

Да, можно, посетите страницу Википедии для Тернарных операторов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...