12,304,228 members (69,782 online)
Tip/Trick
Add your own
alternative version

7.6K views
4 bookmarked
Posted

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

, 12 Jan 2013 CPOL
 Rate this:
Please Sign up or sign in to vote.
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

## License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

## About the Author

 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).

## Comments and Discussions

 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: 31-May-16 4:11 Refresh 1

General    News    Suggestion    Question    Bug    Answer    Joke    Praise    Rant    Admin

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.160530.1 | Last Updated 12 Jan 2013
Article Copyright 2013 by Andreas Gieriet
Everything else Copyright © CodeProject, 1999-2016
Layout: fixed | fluid