Can someone explain what is the operator &= for?
I searched, but I got only results with & or =.
It's a shorthand operator which allows you to collapse
a = a & b
into
a &= b
Apart from bitwise operations on integers, &= can be used on boolean values as well, allowing you to collapse
a = a && b
into
a &= b
However, in the case of logical operation, the expanded form is short-circuiting, while the latter collapsed form does not short-circuit.
Example:
let b() be a function that returns a value and also does stuff that affects the program's state
let a be a boolean that is false
if you do
a = a && b()
the short-circuit happens: since a is false there's no need to evaluate b (and the extra computation that might happen inside b() is skipped).
On the other hand, if you do
a &= b()
the short-circuit doesn't happen: b is evaluated in any case, even when a is false (and evaluating b() wouldn't change the logical outcome), thus any extra computation that might happen inside b() does get executed.