Wouldn't it be nice (case range statements)

John Colvin via Digitalmars-d digitalmars-d at puremagic.com
Tue Oct 14 14:29:58 PDT 2014


if code like this worked: http://dpaste.dzfl.pl/7ea4eb03f02e

A few reasons why it doesn't:

You have to duplicate the case keyword when declaring case 
ranges. Why?

Case ranges are inclusive at both ends of the range, unlike in 
foreach. Again, why?

exponential notation (e.g. `2e9`) returns a double, not a long.


The exponential notation isn't really a problem, declaring some 
enums `enum i2e9 = cast(long)2e9;` deals with it fine. The case 
ranges are a wart though.

Solution:

Allow the second `case` keyword to be removed, which would then 
have the same semantics as the range in foreach.

E.g.
case 0 .. 4: // matches 0,1,2,3
case 0: .. case 4: // matches 0,1,2,3,4

No breakage, greater consistency, neater code, good stuff. At 
least as good as pascal.

Even better, the .. operator would become general (overloadable, 
too) and the case range would just be a special case of it.


More information about the Digitalmars-d mailing list