Sinisterly
Tutorial The best way to toggle a boolean variable. - Printable Version

+- Sinisterly (https://sinister.ly)
+-- Forum: Coding (https://sinister.ly/Forum-Coding)
+--- Forum: Java, JVM, & JRE (https://sinister.ly/Forum-Java-JVM-JRE)
+--- Thread: Tutorial The best way to toggle a boolean variable. (/Thread-Tutorial-The-best-way-to-toggle-a-boolean-variable)



The best way to toggle a boolean variable. - Percent - 07-16-2018

You may have used this:

Code:
myBoolean = !myBoolean;

to toggle your Boolean variable. This is the most common way. However, there exists a much more neat (in my opinion) method:

Code:
myBoolean ^= true;

With the above method, you only have to specify the name of your variable once. Say you had a very long variable name. It would be tedious to have to type out that long name two times:

Code:
thisIsAVeryLongVariableNameAsAnExampleOfWhyThisMethodAintTooGreat = !thisIsAVeryLongVariableNameAsAnExampleOfWhyThisMethodAintTooGreat;

But, doing so only once:

Code:
thisIsAVeryLongVariableNameAsAnExampleOfWhyThisMethodAintTooGreat ^= true;

is much, much nicer looking.

Now, how exactly does "^= true" toggle our Boolean variable?

"myBoolean ^= true" is the equivalent of "myBoolean = myBoolean ^ true"

"^" is the XOR (Exclusive OR) operator in Java. It works like this:

[Image: XNOR.jpg]

Code:
myBoolean = myBoolean ^ 1;

If "myBoolean" is false (zero), then we are putting zero and one through the XOR gate, which, looking at the truth table above, produces a result of one (true), therefore inverting our "myBoolean" variable.

If "myBoolean" is true (1), then we are putting one AND one (the "^= true" part) through the XOR gate, which, judging again from the truth table, produces a result of zero (FALSE!)

That's how "myBoolean ^= true" works to invert your variable, why you should use it, and what it is.


RE: The best way to toggle a boolean variable. - reGEN - 07-16-2018

Sure, but it's not very readable... It's something that works but probably shouldn't do... like I can do a basic addition of two numbers using XOR as well...

Code:
int one = 1, two = 2; int three = one ^ two;

but am I actually going to? And sure, you could argue that it's convenient for very long variable names but that seems like a totally contrived example because if you have super long variable names, you have another issue. But maybe it's just me. ¯\_(ツ)_/¯


RE: The best way to toggle a boolean variable. - Percent - 07-16-2018

(07-16-2018, 06:00 AM)reGEN Wrote: Sure, but it's not very readable... It's something that works but probably shouldn't do... like I can do a basic addition of two numbers using XOR as well...

Code:
int one = 1, two = 2; int three = one ^ two;

but am I actually going to? And sure, you could argue that it's convenient for very long variable names but that seems like a totally contrived example because if you have super long variable names, you have another issue. But maybe it's just me. ¯\_(ツ)_/¯

Of course, it is ultimately a matter of programmer preference. It may not be readable to less-experienced Java programmers, but to well-experienced programmers, it would be very readable.