Improvement to switch-case statement
John Reimer
terminal.node at gmail.com
Wed Dec 31 17:06:35 PST 2008
Hello Yigal,
> 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:...
True, a case statment can take a comma-separated expression list like that,
so maybe there is an opportunity for a compile-time template mixin or something
afterall. I forgot about the comma op.
That's makes things a little more promising.
-JJR
More information about the Digitalmars-d
mailing list