On May 12, 11 20:04, matthew ong wrote:
Hi KennyTM~,
Some of the valid reason:
1) Less key stroke
Invalid,
switch (x = f()) {
case x < 0: return -x
default: return x
}
50 significant characters
auto x = f();
if (x < 0) return -x;
else return x;
41 significant characters
2) Easier code generator to implement
Invalid. Both share the same structure.
switch (x = <variable>) {
case <condition>: <statements> break;
case <condition>: <statements> break;
default: <statements> break;
}
auto x = <variable>;
if (<condition>) { <statements>; }
else if (<condition>) { <statements>; }
else { <statements>; }
3) Better to read.
I don't think so.
4) less worries about braket '{'.
More worries about missing 'break;' (bad C heritage)
5) ....
....
In Java, C++ we avoided using switch because it ONLY support const& literal
type.
D also only supports literals types. A 'switch' statement is often
implemented as a look-up table when compiled, so keeping the cases a
compile-time constant helps to generate more efficient code. If you can
supply an arbitrary condition or a regex, this advantage is lost and
it's no better than a if/else-if/else chain.
Most script base language supports things like this. I believe bash shell script
does. Since D aimed to be a next generation language,
I suppose that should be in with fall through also.
No one forced a "next generation language" have to have a 'switch' with
conditional or regex cases. Look, Python 3 doesn't even have a 'switch'.