Чи є кращий спосіб заперечити булевий текст на Java, ніж простий інший спосіб?
if (theBoolean) {
theBoolean = false;
} else {
theBoolean = true;
}
Чи є кращий спосіб заперечити булевий текст на Java, ніж простий інший спосіб?
if (theBoolean) {
theBoolean = false;
} else {
theBoolean = true;
}
Відповіді:
theBoolean = !theBoolean;
!!bool == !(!(bool)) == bool
.
--
оператора (насправді два з них разом з двома ++
операторами), але не визначає !!
оператора. Якщо ви хочете, -(-(integer))
ви можете використовувати пробіл між двома -
символами. Але !!
розбирає як два !
оператори незалежно від пробілу.
theBoolean ^= true;
Менше натискань клавіш, якщо ваша змінна більше чотирьох літер
Редагувати : код, як правило, повертає корисні результати при використанні в якості пошукових термінів Google. Код, наведений вище, не відповідає. Для тих, хто цього потребує, це біт XOR, як описано тут .
theBoolean = !theBoolean;
абоtheBoolean = theBoolean ? false : true;
"Очевидний" спосіб (для більшості людей)
theBoolean = !theBoolean;
"Найкоротший" спосіб (більшість часу)
theBoolean ^= true;
Найбільш візуальний спосіб (найбільш невизначено)
theBoolean = theBoolean ? false : true;
theMethod( theBoolean ^= true );
Оскільки оператор призначення завжди повертає те, що було призначено, це перемикатиме значення через побітовий оператор, а потім повертає новопризначене значення, яке буде використано в виклику методу.
C
, але в Java
ньому заборонено змішувати булеві та цілі числа (також речі на зразок while(1)
Java не можливі).
Якщо ви використовуєте булеві значення NULL і вважаєте їх помилковими, спробуйте:
static public boolean toggle(Boolean aBoolean) {
if (aBoolean == null) return true;
else return !aBoolean;
}
Якщо ви не передаєте булеві значення NULL, спробуйте:
static public boolean toggle(boolean aBoolean) {
return !aBoolean;
}
Вони є найчистішими, оскільки вони показують наміри в підписі методу, їх легше читати порівняно з ! оператора, і його можна легко налагодити.
Використання
boolean bTrue = true
boolean bFalse = false
boolean bNull = null
toggle(bTrue) // == false
toggle(bFalse) // == true
toggle(bNull) // == true
Звичайно, якщо ви використовуєте Groovy або мову, яка дозволяє методи розширення, ви можете зареєструвати розширення і просто зробити:
Boolean b = false
b = b.toggle() // == true
Boolean
і дійсно перемикати його в межах методу (але все-таки дещо неоднозначно).
Ця відповідь з'явилася під час пошуку "інвертувати булева функція java". Наведений нижче приклад запобігає виходу з ладу деяких інструментів статичного аналізу через логіку розгалуження. Це корисно, якщо вам потрібно інвертувати булеву формулу і не створили комплексні тести одиниць;)
Boolean.valueOf(aBool).equals(false)
або альтернативно:
Boolean.FALSE.equals(aBool)
або
Boolean.FALSE::equals
Boolean.FALSE::equals
до функції картографування замість того, щоб написати трохи лямбда
Якщо ти не робиш нічого особливо професійного, завжди можеш використовувати клас Util. Наприклад, клас утиліти з проекту для класу.
public class Util {
public Util() {}
public boolean flip(boolean bool) { return !bool; }
public void sop(String str) { System.out.println(str); }
}
тоді просто створіть об’єкт Util Util u = new Util();
і отримайте
щось для поверненняSystem.out.println( u.flip(bool) );
Якщо ви все-таки будете використовувати одне і те ж саме, використовуйте метод, і особливо якщо це стосується проектів, складіть клас Util. Не знаю, що є галузевим стандартом. (Досвідчені програмісти можуть мене виправити)
Клас BooleanUtils
підтримує заперечення булевого. Ви знайдете цей клас у commons-lang: commons-lang
BooleanUtils.negate(theBoolean)
Перед:
boolean result = isresult();
if (result) {
result = false;
} else {
result = true;
}
Після:
boolean result = isresult();
result ^= true;