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

Reply via email to