Kısa IF - ELSE ifadesi


82

Kodumu daha okunabilir hale getirmeye çalışıyorum, bu yüzden bazı kısa IF ifadeleri kullanmaya karar verdim.

İşte çalışmayan kodum ("ifade değil"):

jXPanel6.isVisible() ? jXPanel6.setVisible(true) : jXPanel6.setVisible(false);

Bunun nesi var? Parantez mi gerekiyor? Nerede?


2
Mautetto bunu yazmanın daha iyi bir yolunu sağlamış olsa da, bu yapıya genellikle üçlü operatör denir. (Merak ettiyseniz;))
Reese Moore

Bu var koşullu operatör. "Üçlü" sadece 3 işlenen olduğu anlamına gelir.

Koşullu operatör için dil belirtimine bağlantı: docs.oracle.com/javase/specs/jls/se10/html/…

Yanıtlar:


215

"Üçlü ifade" x ? y : zyalnızca koşullu atama için kullanılabilir . Yani, şöyle bir şey yapabilirsiniz:

String mood = inProfit() ? "happy" : "sad";

çünkü üçlü ifade ( Stringbu örnekteki türde ) bir şey döndürüyor .

Gerçekten kısa, sıralı olarak kullanılması amaçlanmamıştır if-else. Özellikle, tek tek parçalar bir değer döndürmezse veya uyumsuz türlerin değerlerini döndürmezse kullanamazsınız. (Her iki yöntem aynı değeri döndürmek için gerçekleştiği takdirde bu yapabileceğini, ancak otelin olmamalı yan etki amacıyla bunda çağırmak için).

Dolayısıyla, bunu yapmanın doğru yolu bir if-else bloğu kullanmaktır:

if (jXPanel6.isVisible()) {
    jXPanel6.setVisible(true);
}
else {
    jXPanel6.setVisible(false);
}

hangisi tabii ki kısaltılabilir

jXPanel6.setVisible(jXPanel6.isVisible());

Bu son ifadelerin her ikisi de benim için daha okunaklı, çünkü ne yapmaya çalıştığını daha net bir şekilde anlatıyorlar. (Ve bu arada, koşullarınızı yanlış mı anladınız? Görünüşe göre bu bir geçişten ziyade işlemsiz bir durumdur).

Karıştırmayın düşük karakter sayısı ile okunabilirliği . Kilit nokta, en kolay anlaşılan şeydir; ve dil özelliklerini hafifçe kötüye kullanmak okuyucuların kafasını karıştırmanın veya en azından zihinsel olarak çifte çekim yapmalarını sağlamanın kesin bir yoludur.


1
Atama için yalnızca koşullu işleci kullanabileceğiniz doğru değildir. İfadenin gerekli olduğu her yerde kullanabilirsiniz.

28
jXPanel6.setVisible(jXPanel6.isVisible());

veya sizin formunuzda:

jXPanel6.setVisible(jXPanel6.isVisible()?true:false);

14
FWIW, hiçbir zaman yazmaya ihtiyaç olmadığını hissediyorum <bool condition> ? true : falseçünkü tam olarak adaletle eşdeğerdir <bool condition>.
Andrzej Doyle

2
Açıkçası! Ancak monczek Short If-Else ifadesini sordu, ben de sözdizimini göstermek için kodladım.
mauretto

4

Üçlü operatör, bir atamanın yalnızca sağ tarafı olabilir ve kendine ait bir ifade olamaz.

http://www.devdaily.com/java/edu/pj/pj010018/


Koşullu operatörün yalnızca bir atamanın RHS'sinde kullanılabileceği doğru değildir. Bir ifadenin kullanılabileceği her yerde kullanılabilir.


2

Partiye biraz geç kaldım ama gelecekteki okuyucular için.

Söyleyebileceğim kadarıyla, sadece görünürlük durumunu değiştirmek istiyorsun değil mi? Neden sadece !operatörü kullanmıyorsunuz ?

jxPanel6.setVisible(!jxPanel6.isVisible);

Bu bir if ifadesi değil, ancak örneğinizle ilgili kod için bu yöntemi tercih ediyorum.


Ayrıca, durumu değiştirmeye çalışıyorsanız, ifadenin ters olduğunu düşünüyorum. Bu yüzden mi işe yaramadı? JXPanel6.isVisible () olmalı mı? jXPanel6.setVisible (yanlış): jXPanel6.setVisible (doğru);
Andy Body

Bu bir geçiş ifadesi değilse, zaten bu şekilde ayarlanmış bir şeyi görünür kılma amacını anlamıyorum. İsVisible durumu alır ve setVisible durumu ayarlar, değil mi? İsVisible ifadesi true dönüyorsa, neden yeniden true olarak ayarlansın? Bir şey mi kaçırıyorum?
Andy Body

1

Bunu bu kadar basit yapabilirsiniz, ben bunu tepki kancalarında yaptım:

 (myNumber == 12) ? "true" : "false"

aşağıdaki işlev bu kadar uzunsa:

if (myNumber == 12) {
  "true"
} else {
  "false"
}

Umarım ^ _ ^ yardımcı olur

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.