Wat is een efficiënte if/else in Java?

Ik probeer een andere waarde terug te geven met een eenvoudige if/else om te controleren op een even getal in Java.

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

Ik weet het in JavaScript dat je kunt gebruiken

if() : a ? b ;

Kan dit in Java worden gebruikt?

2
als en else vrij verdomd efficiënt zijn ...
toegevoegd de auteur Rex M, de bron
Kun je ook niet doen: return (verplaats% 2 == 0)? "o": "O";
toegevoegd de auteur Blender, de bron
ternair: return (verplaats% 2 == 0)? "o": "O"; - maar het is hetzelfde als het uwe, maar het kan handig zijn voor zeer korte if-else -instructies voor beknoptheid. (dit is bewerkt)
toegevoegd de auteur wkl, de bron
Whoops, bedankt @Shakedown - op zijn plaats bewerkt.
toegevoegd de auteur wkl, de bron
@birryree: Dat is geen geldige verklaring. U wilde zeggen: return (verplaats% 2 == 0)? "o": "O";
toegevoegd de auteur Nate W., de bron

7 antwoord

Ja, u kunt de ternaire operator in Java gebruiken:

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

Verwacht niet dat het sneller is dan de if - else .

12
toegevoegd
Ik wilde gewoon een paar regels code verkleinen. Bedankt voor alle reacties.
toegevoegd de auteur Aaron, de bron

Ja, u kunt de voorwaardelijke operator gebruiken in Java:

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

Het zal je programma niet sneller maken, maar het is iets beknopter en als je bekend bent met de conditionele operator, zul je het waarschijnlijk gemakkelijker vinden om te lezen.

Maar omgekeerd, als u niet deze operator kent, zal het moeilijk zijn om te raden wat de code doet.

3
toegevoegd

In plaats van de if versus de ternaire operator ? te "optimaliseren", moet u zich richten op de verplaats% 2 == 0 . Als verplaatsen een geheel getal is en geen variabele met drijvende komma, is may sneller:

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

Bitbewerkingen zijn meestal sneller dan divisie- of modulo-berekeningen.

1
toegevoegd

Yes you can. It's called a ternary operator

Gebruik:

  true ? case1 : case2;             //returns case1
  false ? case1 : case2;            //returns case2
1
toegevoegd
Dat is een vrij slecht voorbeeld van hoe het te gebruiken.
toegevoegd de auteur Nate W., de bron

Als je dit echt verblindend snel wilt hebben, wat behoorlijk dubieus is, moet je ook een opzoektabel overwegen:

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

Maar ik zou geen van de hier gegeven suggesties uitvoeren zonder ze te timen, en ik zou helemaal niets doen totdat het bewezen was dat wat je nu hebt echt een bottleneck is, waarmee ik bedoel dat het meer dan ongeveer 50% van de CPU-tijd.

0
toegevoegd

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

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

0
toegevoegd

Er is geen manier om een ​​if-statement op een meer of minder efficiënte manier te gebruiken.

... en nog meer - onthoud dat, en dit geldt niet alleen voor if-statements:

U moet nooit proberen de gebruikte uitdrukkingen te optimaliseren, om prestatieredenen - schrijf code die zich richt op leesbaarheid (en op termijn, onderhoudbaarheid). De reden hiervoor is dat er een JIT (Just-in-time compiler) is die de bytecode optimaliseert en de instructies wijzigt die je hebt opgegeven in je byte-code.

Als u overweegt om de ternaire operator te gebruiken, overweeg dan, zal dit leiden tot moeilijker te begrijpen code (als u meerdere mensen bent die aan de code werken). Als u alleen aan de code werkt, doe dan wat u wilt - en ja:

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

is veel compacter dan:

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