You can initialize two variables to the same value at once, kinda:
var foo, bar; foo = bar = 10;
But there is no similarly easy mechanism to add, say, 5 to both
bar at the same time. Of course, it’s simple enough to just do:
foo += 5; // foo is now 15 bar += 5; // bar is now 15
But that’s two operations.
The trick is:
foo += -bar + (bar += 5); // foo and bar are now 15
You will probably never need this, it’s just interesting to know it’s possible.
Thanks to Matheus Avellar for sending in this little mindbending trick, who also explains:
-bargets parsed and becomes the negative value of
bar, so -10. Then,
a += 5runs and sets
barto 15 (10 + 5). Finally, it sums up both values (-10 + 15) and gives you the difference between old
bar, which is 15.
Or like this :)
‘foo = bar += 5’ would just set ‘foo’ equal to ‘bar + 5’.
@William, this is what Chris wants. He wants to initialize both variables with 10:
Then add 5 to each of them:
Every math operation returns its new value:
@Kevin in the example he set both to 10 but the exercise is all about what if you have 2 different variables and you want them both to go up by 5.
Yup, that works fine, thanks for the tip. I don’t understand what William is saying by telling that it wont work.
If I saw something like that in code I’d probably spend next two hours trying to understand why.
Code like this is written only for education, not production.
You say about
foo += 5; bar += 5;:
foo += -bar + (bar += 5);is worse in that regard, since that’s FOUR operations. You could reduce it to three with
foo -= bar - (bar += 5), with the added advantage of making your code even more inscrutable.