Что такое эффективный if /else в Java?

#java #if-statement

#java #оператор if

Вопрос:

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

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

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

 if () : a ? b ;
 

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

Комментарии:

1. if и else чертовски эффективны…

2. троичный: return (move % 2 == 0) ? "o" : "O"; — но он эквивалентен вашему, но может быть полезен для очень коротких if-else операторов для краткости. (это было отредактировано)

3. Разве вы не можете также сделать: return (move % 2 == 0) ? "o" : "O";

4. @birryree: Это недопустимое утверждение. Вы хотели сказать: return (move % 2 == 0) ? "o" : "O";

5. Упс, спасибо @Shakedown — отредактировано на месте.

Ответ №1:

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

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

Просто не ожидайте, что он будет быстрее, чем if else .

Комментарии:

1. Я просто хотел сократить несколько строк кода. Спасибо за все ответы.

Ответ №2:

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

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

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

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

Ответ №3:

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

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

   true ? case1 : case2;              // returns case1
  false ? case1 : case2;             // returns case2
 

Комментарии:

1. Это довольно плохой пример того, как его использовать.

Ответ №4:

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

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

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

Ответ №5:

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

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

Ответ №6:

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

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

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

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

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

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

 Object var;
if (boolean-expression)
   var = some-value;
else
   var = another-value;
 

Ответ №7:

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

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

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