Java'da bir boole'yi reddetmenin basit bir if-else'den daha iyi bir yolu var mı?
if (theBoolean) {
theBoolean = false;
} else {
theBoolean = true;
}
Java'da bir boole'yi reddetmenin basit bir if-else'den daha iyi bir yolu var mı?
if (theBoolean) {
theBoolean = false;
} else {
theBoolean = true;
}
Yanıtlar:
theBoolean = !theBoolean;
!!bool == !(!(bool)) == bool
.
--
işleci tanımlar (aslında, ikisi, iki ++
işleci ile birlikte ), ancak bir !!
işleci tanımlamaz . İsterseniz -(-(integer))
iki -
karakter arasında beyaz boşluk kullanabilirsiniz . Ancak beyaz boşluktan bağımsız !!
olarak iki !
operatör olarak ayrışır .
theBoolean ^= true;
Değişkeniniz dört harften uzunsa daha az tuş vuruşu
Düzenle : kod, Google arama terimleri olarak kullanıldığında yararlı sonuçlar döndürme eğilimindedir. Yukarıdaki kod geçerli değildir. İhtiyaç duyanlar için, burada açıklandığı gibi XOR .
theBoolean = !theBoolean;
veya gibi diğer sürümlere göre % 12 daha hızlıtheBoolean = theBoolean ? false : true;
"Açık" yol (çoğu insan için)
theBoolean = !theBoolean;
"En kısa" yol (çoğu zaman)
theBoolean ^= true;
"En görsel" yol (en belirsiz)
theBoolean = theBoolean ? false : true;
theMethod( theBoolean ^= true );
Atama işleci her zaman atanmış olanı döndürdüğünden, bu değer bitsel işleç aracılığıyla değiştirilir ve sonra yöntem çağrısında kullanılacak yeni atanan değeri döndürür.
C
Kesinlikle, ama içinde Java
boolean ve tamsayı karıştırılmasına izin verilmez ( while(1)
Java'da böyle şeyler de mümkün değildir).
Boolean NULL değerlerini kullanır ve bu değerleri yanlış görürseniz, şunu deneyin:
static public boolean toggle(Boolean aBoolean) {
if (aBoolean == null) return true;
else return !aBoolean;
}
Boolean NULL değerlerini vermiyorsanız, şunu deneyin:
static public boolean toggle(boolean aBoolean) {
return !aBoolean;
}
Bunlar en temiz olanıdır, çünkü yöntem imzasındaki niyeti gösterirler, okunması daha kolaydır ! operatör ve kolayca hata ayıklama.
kullanım
boolean bTrue = true
boolean bFalse = false
boolean bNull = null
toggle(bTrue) // == false
toggle(bFalse) // == true
toggle(bNull) // == true
Tabii ki, Groovy veya uzantı yöntemlerine izin veren bir dil kullanıyorsanız, bir uzantı kaydedebilir ve şunları yapabilirsiniz:
Boolean b = false
b = b.toggle() // == true
Boolean
ve gerçekten yöntem içinde değiştirin (ama yine de biraz belirsiz).
Bu cevap "java ters boolean işlevi" arandığında ortaya çıktı. Aşağıdaki örnek, bazı statik analiz araçlarının dallanma mantığı nedeniyle yapıların başarısız olmasını önleyecektir. Bir booleanı ters çevirmeniz ve kapsamlı birim testleri oluşturmadıysanız faydalıdır;)
Boolean.valueOf(aBool).equals(false)
Veya alternatif olarak:
Boolean.FALSE.equals(aBool)
veya
Boolean.FALSE::equals
Boolean.FALSE::equals
Küçük bir lambda yazmak yerine bir haritalama fonksiyonuna geçebilmeyi seviyorum
Özellikle profesyonel bir şey yapmıyorsanız, her zaman bir Util sınıfı kullanabilirsiniz. Ör. Sınıf için bir projeden bir util sınıfı.
public class Util {
public Util() {}
public boolean flip(boolean bool) { return !bool; }
public void sop(String str) { System.out.println(str); }
}
o zaman sadece bir Util nesnesi oluşturun
Util u = new Util();
ve geri dönüş için bir şey varSystem.out.println( u.flip(bool) );
Aynı şeyi tekrar tekrar kullanacaksanız, bir yöntem kullanın ve özellikle de projeler arasındaysa, bir Util sınıfı yapın. Ancak endüstri standardının ne olduğunu bilmiyorum. (Deneyimli programcılar beni düzeltmekten çekinmeyin)
Sınıf BooleanUtils
, bir booleanın olumsuzlanmasını destekler. Bu sınıfı commons-lang'de bulabilirsiniz: commons-lang
BooleanUtils.negate(theBoolean)
Önce:
boolean result = isresult();
if (result) {
result = false;
} else {
result = true;
}
Sonra:
boolean result = isresult();
result ^= true;