Есть ли лучший способ отменить логическое в Java, чем простое if-else?
if (theBoolean) {
theBoolean = false;
} else {
theBoolean = true;
}
Есть ли лучший способ отменить логическое в Java, чем простое if-else?
if (theBoolean) {
theBoolean = false;
} else {
theBoolean = true;
}
theBoolean = !theBoolean;
theBoolean ^= true;
Меньше нажатий клавиш, если ваша переменная длиннее четырех букв
"Очевидный" способ (для большинства людей)
theBoolean = !theBoolean;
Самый короткий путь (большую часть времени)
theBoolean ^= true;
"Самый визуальный" способ (наиболее неуверенно)
theBoolean = theBoolean ? false : true;
theMethod( theBoolean ^= true );
Так как оператор присваивания всегда возвращает то, что было назначено, это приведет к переключению значения с помощью побитового оператора, а затем вернет новое назначенное значение, которое будет использоваться в вызове метода.
Если вы используете значения Boolean 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
Если вы не занимаетесь чем-то особенно профессиональным, вы всегда можете использовать класс Util. Например, класс утилит из проекта для класса.
public class Util {
public Util() {}
public boolean flip(boolean bool) { return !bool; }
public void sop(String str) { System.out.println(str); }
}
затем просто создайте объект Util u = new Util();
и есть что-то для возврата System.out.println( u.flip(bool) );
Если вы собираетесь использовать одно и то же снова и снова, используйте метод, и особенно если он используется в разных проектах, создайте класс Util. Не знаю, что такое отраслевой стандарт. (Опытные программисты не стесняются меня поправлять)
Этот ответ возник при поиске "булевой функции Java Invert". Приведенный ниже пример предотвратит сбой сборок некоторыми инструментами статического анализа из-за логики ветвления. Это полезно, если вам нужно инвертировать логическое значение и не создавать комплексные модульные тесты;)
Boolean.valueOf(aBool).equals(false)
или альтернативно:
Boolean.FALSE.equals(aBool)
или
Boolean.FALSE::equals
До:
boolean result = isresult();
if (result) {
result = false;
} else {
result = true;
}
После:
boolean result = isresult();
result ^= true;