Switch: Case Range Syntax

Jonathan M Davis jmdavisProg at gmx.com
Wed Aug 17 10:48:17 PDT 2011


On Wednesday, August 17, 2011 10:27 Vijay Nayar wrote:
> D adds a very handy feature that allows you to check for a range of
> values in a single case. Is there a particular reason that the syntax
> "case <start>: .. case <end>:" is used instead of treating the case
> statement similarly to an array slice, e.g. "case <start> .. <end>:"?
> 
> For example:
> 
> import std.stdio;
> 
> void main() {
> int bob = 12;
> switch (bob) {
> // Why not "case 0 .. 9:"?
> case 0: .. case 9:
> writeln("Less than 10.");
> case 10: .. case 19:
> writeln("Less than 20.");
> case 20: .. case 29:
> writeln("Less than 30.");
> break;
> default:
> break;
> }
> // Output: Less than 20. Less than 30.
> }

I don't know, but ranged case statements don't have the same semantics as 
giving a range of values when slicing or to a foreach loop, so that may be 
why.

arr[0 .. 10]

does _not_ include the element at index 10.

case 0: case 10:

_does_ include 10. So, it actually probably be a bad thing for them to use the 
same syntax. To use the same syntax for both would make the semantics of that 
syntax inconsistent and confusing.

- Jonathan M Davis


More information about the Digitalmars-d mailing list