Steven Schveighoffer:
> I have code like this in dcollections:
This is similar code that shows the same thing:
import std.stdio;
void main() {
bool b = true;
bool c;
if (c = !b)
writeln("****");
}
> Since when did bool = bool not give a bool result?
I guess since Walter has decided to avoid in D the common bug present in C and
C++ programs caused by using = instead of == inside an if().
For the exactly the same bug-avoidance purpose, Python too allows chained
assigns:
a = b = 10
but it refuses the assign in the if:
if x = 10: ...
> Do I have to write it out like this:
> if((wasRemoved = !it.empty) == true)
Yep. Or you can write it like this, also gaining readability as side-effect:
wasRemoved = !it.empty
if (wasRemoved) { ...
In other situations you can write code like this in D:
if (bool c = !b)
A bit of less syntactic convenience is a price worth paying for a reduced
bug-prone language that wants to keep the flavour of upwards compatibility to C
that D wants.
> I can understand for ints and strings and whatnot, but for booleans?
My guess: that's a special case. Special cases kill languages (see C++), so
better to have no exceptions. Less things to remember, simpler compiler,
shorter books about D, less time to read the language.
Bye,
bearophile