Што з'яўляецца эфектыўным, калі/яшчэ ў Java?

Я спрабую вярнуць іншае значэнне, выкарыстоўваючы просты, калі/яшчэ праверыць для цотнага ліку ў Java.

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

Я ведаю, што ў JavaScript вы можаце выкарыстоўваць

if() : a ? b ;

Ці можа гэта быць выкарыстана ў Java?

2
<�Код>, калі і яшчэ даволі чартоўску эфектыўны ...
дададзена аўтар Rex M, крыніца
Не можаце вы зрабіць: вяртанне (крок% 2 == 0)? "О": "O";
дададзена аўтар Blender, крыніца
патройны: вяртанне (крок% 2 == 0)? «О»: «O»; - але гэта эквівалентна вашай, але можа быць карысна для вельмі кароткага калі-то яшчэ заявы для сцісласці. (Гэта было адрэдагавана)
дададзена аўтар wkl, крыніца
Упс, дзякуючы @Shakedown - адрэдагаваны на месцы.
дададзена аўтар wkl, крыніца
@birryree: Гэта не з'яўляецца дапушчальным заяву. Вы хацелі сказаць: вяртанне (крок% 2 == 0)? "О": "O";
дададзена аўтар Nate W., крыніца

7 адказы

Так, вы можаце выкарыстоўваць патройны аператар у Java:

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

<�Моцны> Толькі не чакайце, што гэта будзе хутчэй, чым , калі -. <�Код> яшчэ

12
дададзена
Я проста хацеў, каб скараціць некалькі радкоў кода. Дзякуй за ўсе адказы.
дададзена аўтар Aaron, крыніца

Так, вы можаце выкарыстоўваць ўмоўнага аператара ў Java:

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

Гэта не зробіць вашу праграму хутчэй, але гэта крыху больш кароткім, і калі вы знаёмыя з умоўным аператарам, вы, верагодна, будзе лягчэй чытаць.

Але і наадварот, калі вы не ведаць гэты аператар гэта будзе цяжка адгадаць, што робіць гэты код.

3
дададзена

Замест таго, каб «аптымізаваць» клавішы , калі у параўнанні з патройны аператар вы павінны засяродзіцца на Перанесці% 2 == 0 . Калі перамясціць з'яўляецца цэлым лікам, а не пераменная з якая плавае кропкай у гэтым можа хутчэй:

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

Бітаў аперацыі, як правіла, хутчэй, чым дзяленне па модулю або разлікі.

1
дададзена

Yes you can. It's called a ternary operator

выкарыстанне:

  true ? case1 : case2;             //returns case1
  false ? case1 : case2;            //returns case2
1
дададзена
Гэта вельмі дрэнны прыклад таго, як выкарыстоўваць яго.
дададзена аўтар Nate W., крыніца

Калі вам сапраўды трэба, каб гэта Асляпляльна хутка, што даволі сумнеўна, вы павінны таксама разгледзець табліцу пошуку:

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

Але я б не рэалізаваць якой-небудзь з прапаноў, прыведзеных тут без іх сінхранізацыі, і я б нічога не рабіць наогул, пакуль не было даказана, што ў вас ёсць зараз на самай справе з'яўляецца вузкім месцам, на якое я маю на ўвазе, што ён спажывае больш, чым пра 50% працэсарнага часу.

0
дададзена

<�Код> (умоўна)? калі-карэкціровачны заяву: калі-хлусня заяву;

Yes it can, check out the Wikipedia page for Ternary Operators

0
дададзена

Там няма ніякага спосабу, вы можаце выкарыстоўваць, калі-заяву, у больш ці менш эфектыўным спосабам.

... і яшчэ больш - мець на ўвазе, што, і гэта характэрна не толькі для калі-заявы:

Вы павінны <�моцны> ніколі спрабуе аптымізаваць выразы, якія выкарыстоўваюцца для павышэння прадукцыйнасці - напісаць код, які факусуюць на чытальнасці (і ў перспектыве, рамонтапрыдатнасць). Прычына гэтага заключаецца ў тым, што ёсць JIT (Just-в-часу кампілятар), што дасць магчымасць аптымізаваць байткод, і змяняць інструкцыі, якія вы паказалі ў вашым байткод.

Калі вы думаеце аб выкарыстанні трынітарнага аператара, а затым разгледзець, ці будзе гэта прывесці да цяжэй зразумець код (калі вы некалькі людзей, якія працуюць на кодзе). Калі гэта толькі вы працуеце над кодам, то рабіць, як вам заўгодна - і так:

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

значна больш кампактным, чым:

Object var;
if (boolean-expression)
   var = some-value;
else
   var = another-value;
0
дададзена