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;
}
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;
}
theBoolean = !theBoolean;
To ... naprawdę oczywiste, oops! Nie wiem, dlaczego nie myślałem o tym. Dzięki. –
Głosuję na operatora !! bool podobnego do ++ i oraz --i ;-)) – ypnos
! Boolean wydaje się być naturalnym wyborem - może w przyszłości. –
theBoolean ^= true;
Mniej klawiszy, czy zmienna jest dłuższy niż cztery litery
i jest zgodne z DRY :) – Tetha
, ale jest to mniej oczywiste dla czytelników, którzy nie są tym wszystkim na xor ... –
Spójrz jest duszą dowcipu. –
Przed:
boolean result = isresult();
if (result) {
result = false;
} else {
result = true;
}
Po:
boolean result = isresult();
result ^= true;
Kto kiedykolwiek głosował? Czy możesz wyjaśnić również przyczynę? –
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. –
@PriiduNeemre i że wyborcą nie jesteś? – Elltz
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;
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.
Zawiń implementację w funkcji/metodzie zwanej przełącznikiem, a następnie prawie nie da się jej pomylić. – Lambage
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;
}
Są 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
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. –
Co, jeśli nie ma! operator? – onmyway133