13,591,353 members
Tip/Trick
alternative version

#### Stats

10.4K views
4 bookmarked
Posted 12 Jan 2013
Licenced CPOL

# To Toggle or Not to Toggle - xor is Your Friend

, 12 Jan 2013
Short tip to show a convenient use of the lesser known xor operator

## Introduction

I struggle once in a while over some complicated `if`-`elseif`-`else `constructs that have a more concise alternative: use of the xor operator (means: exclusive-or) that many languages provide.

This tip shows the use of xor on an example of a conditional toggle function. Such functions may be used in automated GUI tests where e.g. in a tree view a sub-tree has to be opened if it is not yet open, or has to be closed if it is open.

It is a trivial tip, but it seems that many people either don't know of it or it does not occur to them to use it.

## Using the Code

Assuming you had to write the following function:

```// sets the ToggleButton to the defined pressed state (true = pressed, false = not pressed).
void ClickIfNeeded(ToggleButton button, bool pressed)
{
...
}```

The xor implementation provides in my view a cleaner implementation compared to the naive implementation:

 Naive implementation xor based implementation ```void ClickIfNeeded(ToggleButton button, bool pressed) { if (button.IsPressed) { if (!pressed) { button.Click(); } } else { if (pressed) { button.Click(); } } }``` ```void ClickIfNeeded(ToggleButton button, bool pressed) { // click the button if it has not yet // the requested pressed state if (button.IsPressed ^ pressed) button.Click(); }```

The Exclusive-Or operator:

• the xor operator has for C, C++, C#, etc. the following sign: `^`
• xor gives `true` if exactly one of the operands is true (hence: exclusive or)
• xor gives `false` if both operands have the same value.

i.e. in the example above: only click the toggle button if it has not yet the requested pressed state.

## History

 V1.0 2013-01-12 Initial version

## Share

 Founder eXternSoft GmbH Switzerland
I feel comfortable on a variety of systems (UNIX, Windows, cross-compiled embedded systems, etc.) in a variety of languages, environments, and tools.
I have a particular affinity to computer language analysis, testing, as well as quality management.

More information about what I do for a living can be found at my LinkedIn Profile and on my company's web page (German only).

## You may also be interested in...

 First Prev Next
 My vote of 5 JamesHollowell16-Jan-13 18:43 JamesHollowell 16-Jan-13 18:43
 Re: My vote of 5 Andreas Gieriet16-Jan-13 19:48 Andreas Gieriet 16-Jan-13 19:48
 My vote of 5 arid0813-Jan-13 23:04 arid08 13-Jan-13 23:04
 Re: My vote of 5 Andreas Gieriet14-Jan-13 1:56 Andreas Gieriet 14-Jan-13 1:56
 good idea but... Boombuler13-Jan-13 20:37 Boombuler 13-Jan-13 20:37
 Re: good idea but... Andreas Gieriet14-Jan-13 1:55 Andreas Gieriet 14-Jan-13 1:55
 Last Visit: 31-Dec-99 18:00     Last Update: 19-Jun-18 10:02 Refresh 1