Improvement to switch-case statement

Yigal Chripun yigal100 at gmail.com
Wed Dec 31 15:50:39 PST 2008


John Reimer wrote:
> Hello Yigal,
>
>> Mike James wrote:
>>
>>> Just an idea that could improve Ds switch-case statement - add an
>>> elipsys as in object Pascal to allow case ranges.
>>>
>>> switch (var) {
>>> case 1:
>>> \\ do something
>>> break;
>>> case 2..10:
>>> \\ do something else
>>> break;
>>> }
>>> What do people think?
>>>
>>> -=mike=-
>>>
>> vote--
>>
>> IMO, either the switch statement should remain the low level
>> (effiecient) construct as in C, or replaced by a general mechanism of
>> pattern matching. your solution is kinda between the two above options
>> and I don't see the point of it.
>>
>> I'd personally prefer pattern matching to be added to D and the switch
>> to be deprecated and eventually removed from the language.
>>
>
>
> Well, the D switch statement has already abandoned the low-level C
> construct in that it allows for switching on strings. I don't think
> there is a reason to believe that adding the range feature would mean a
> loss of efficiency.
>
> I have to agree that this would appear to be a fairly simple and useful
> feature that exists in other "old" languages like Pascal and
> derivitives. I'm not sure why it was left out in D, but I wouldn't be a
> bit surprised if the request has been made before.
>
> On the other hand, it probably wouldn't be hard to implement a range as
> a compile time template (or plain) function inserted after the case
> statement:
>
> case range(2,10): //
>
> But then again... since array slices make use of "..", it seems a shame
> that it can't also be used in the case statement for a similar purpose.
>
> -JJR
>
>

D's switch is indeed better than C already but it still is rather 
low-level at least from a syntax point of view: it uses labels and break.
Can the current switch be extended to support full pattern matching 
without conflicting with the current syntax?
what about specifying alist of values, like: case 1,2,3:...



More information about the Digitalmars-d mailing list