2008-10-22 14 views
166

Czy istnieje lepszy sposób na zanegowanie wartości logicznej w języku Java niż prosty element if-else?Najczystszy sposób przełączania zmiennej binarnej w Javie?

if (theBoolean) { 
    theBoolean = false; 
} else { 
    theBoolean = true; 
} 
+0

oh ładny, miałem zadać to samo pytanie, chociaż moje pytanie byłoby specyficzne dla javascript/as3 lub ogólnie ECMAScript ... które z łatwością zostaną omówione w tym pytaniu. –

+0

Co, jeśli nie ma! operator? – onmyway133

Odpowiedz

433
theBoolean = !theBoolean; 
+11

To ... naprawdę oczywiste, oops! Nie wiem, dlaczego nie myślałem o tym. Dzięki. –

+26

Głosuję na operatora !! bool podobnego do ++ i oraz --i ;-)) – ypnos

+0

! Boolean wydaje się być naturalnym wyborem - może w przyszłości. –

138
theBoolean ^= true; 

Mniej klawiszy, czy zmienna jest dłuższy niż cztery litery

+11

i jest zgodne z DRY :) – Tetha

+24

, ale jest to mniej oczywiste dla czytelników, którzy nie są tym wszystkim na xor ... –

+6

Spójrz jest duszą dowcipu. –

0

Przed:

boolean result = isresult(); 
if (result) { 
    result = false; 
} else { 
    result = true; 
} 

Po:

boolean result = isresult(); 
result ^= true; 
+0

Kto kiedykolwiek głosował? Czy możesz wyjaśnić również przyczynę? –

+9

Dwa główne powody, dla których mogłem pomyśleć, dlaczego ktoś mógł cię zlekceważyć: 1) Nekromancja w nić (_come on! Pytanie zadano 7 (!) Lat temu! _) & Twoja odpowiedź nie przynosi nic nowego do stołu; 2) Wyborca ​​oczekiwał czegoś "czystszego" (_read: shorter_) - odpowiedź AaronMaenpaa jest tego najlepszym przykładem. –

+0

@PriiduNeemre i że wyborcą nie jesteś? – Elltz

14

Istnieje kilka

The "oczywisty" sposób (dla większości ludzi)

theBoolean = !theBoolean; 

The "najkrótsza" sposób (przez większość czasu)

theBoolean ^= true; 

"Najbardziej wizualny" sposób (najbardziej niepewnie)

theBoolean = theBoolean ? false : true; 

Extra: Przegubowe i używać w wywołaniu metody

theMethod(theBoolean ^= true); 

Ponieważ operator przypisania zawsze powraca to, co zostało przypisane, to będzie ustawić wartość poprzez operatory bitowe, a następnie powrócić do nowo przypisaną wartość być użyte w wywołaniu metody.

+0

Zawiń implementację w funkcji/metodzie zwanej przełącznikiem, a następnie prawie nie da się jej pomylić. – Lambage

0

Jeśli używasz wartości logiczne NULL i rozważyć ich fałszywe, spróbuj tego:

static public boolean toggle(Boolean aBoolean) { 
    if (aBoolean == null) return true; 
    else return !aBoolean; 
} 

Jeśli nie podając logicznych wartości NULL, spróbuj tego:

static public boolean toggle(boolean aBoolean) { 
    return !aBoolean; 
} 

najczystszych ponieważ pokazują zamiar w metodzie podpisu, są łatwiejsze do odczytania w porównaniu do ! operator i można go łatwo debugować.

Wykorzystanie

boolean bTrue = true 
boolean bFalse = false 
boolean bNull = null 

toggle(bTrue) // == false 
toggle(bFalse) // == true 
toggle(bNull) // == true 

Oczywiście, jeśli używasz Groovy lub język, który pozwala metody rozszerzenie, możesz zarejestrować rozszerzenie i po prostu zrobić:

Boolean b = false 
b = b.toggle() // == true