#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% процессорного времени.