Java'da verimli/if/else nedir?

Java'da çift sayıyı kontrol etmek için basit bir if/else kullanarak farklı bir değer döndürmeye çalışıyorum.

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

JavaScript’te kullanabileceğinizi biliyorum

if() : a ? b ;

Bu Java'da kullanılabilir mi?

2
ve else ise oldukça verimli ...
katma yazar Rex M, kaynak
Ayrıca yapamazsınız: return (% 2 == 0’ı taşı)? "o": "O";
katma yazar Blender, kaynak
üçlü: dönüş (% 2 == 0’ı taşı)? "o": "O"; - ama sizinkiyle eşdeğerdir, ancak kısalık için çok kısa if-else ifadeleri için yararlı olabilir. (bu düzenlenmiştir)
katma yazar wkl, kaynak
Whoops, teşekkürler @Shakedown - yerinde düzenledi.
katma yazar wkl, kaynak
@birryree: Bu geçerli bir ifade değil. Söylemelisiniz: dönüş (% 2 == 0’ı taşı)? "o": "O";
katma yazar Nate W., kaynak

7 cevap

Evet, Java'daki üçlü operatörü kullanabilirsiniz:

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

- else ise daha hızlı olmasını beklemeyin.

12
katma
Sadece birkaç satırlık kodu azaltmak istedim. yanıtların hepsi için teşekkür ederiz.
katma yazar Aaron, kaynak

Evet, içindeki koşullu operatörü kullanabilirsiniz. Java:

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

Programınızı daha hızlı yapmaz, ancak biraz daha özlüdür ve koşullu operatöre aşina iseniz, muhtemelen okumayı daha kolay bulacaksınız.

Ancak, tersine, bu operatörü yapmazsanız eğer kodun ne olduğunu tahmin etmek zor olacaktır.

3
katma

yerine, üçlü operatör ? yerine "en iyileştirme" yerine % 2 == 0 satırına odaklanmanız gerekir. taşı , bir tam sayı ve bir kayan nokta değişkeni değilse, bu olabilir daha hızlı olabilir:

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

Bit işlemleri genellikle bölünme veya modulo hesaplamalarından daha hızlıdır.

1
katma

Yes you can. It's called a ternary operator

Kullanımı:

  true ? case1 : case2;             //returns case1
  false ? case1 : case2;            //returns case2
1
katma
Bunu kullanmak için oldukça kötü bir örnek.
katma yazar Nate W., kaynak

Gerçekten çok şahane bir şekilde, bu çok kasvetli olmak için buna ihtiyacınız varsa, bir arama tablosu düşünmelisiniz:

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

Ama burada verilen önerilerin hiçbirini, onları zamanlamadan uygulayamayacağım, ve şimdi sahip olduğunuz şeyin gerçekten bir darboğaz olduğunu kanıtlayana kadar hiçbir şey yapmam. CPU zamanının% 50'si.

0
katma

(koşullu)? if-true-statement: if-false-statement;

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

0
katma

If ifadesini daha çok veya daha az verimli bir şekilde kullanmanın bir yolu yoktur.

... ve daha fazlası - aklınızda bulundurun ve bu sadece if ifadeleri için geçerli değildir:

Performans nedenlerinden ötürü, kullanılan ifadeleri optimize etmeyi asla kullanmanız gerekir - okunabilirliğe (ve vadede, sürekliliğe) odaklanan kod yazın. Bunun nedeni, bayt kodunu optimize edecek ve bayt kodunuzda belirttiğiniz talimatları değiştirecek bir JIT (Just-in-time derleyici) olmasıdır.

Üçlü operatörü kullanmayı düşünüyorsanız, düşünün, bu kodları anlamak için daha zor olacaktır (eğer kod üzerinde çalışan birden fazla kişi varsa). Eğer sadece kod üzerinde çalışıyorsanız o zaman lütfen yapın - ve evet:

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

daha çok daha kompakttır:

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