Switch
Georg Wrede
georg.wrede at iki.fi
Mon May 18 20:46:22 PDT 2009
Andrei Alexandrescu wrote:
> Georg Wrede wrote:
>> bearophile wrote:
>>>
>>> void classify(char c) {
>>> write("You passed ");
>>> switch (c) {
>>> case '#':
>>> writeln("a hash sign.");
>>> break;
>>> case '0' ..> '9':
>>> writeln("a digit.");
>>> break;
>>> case 'A' ..> 'Z', 'a' ..> 'z':
>>> writeln("an ASCII character.");
>>> break;
>>> case '.', ',', ':', ';', '!', '?':
>>> writeln("a punctuation mark.");
>>> break;
>>> default:
>>> writeln("quite a character!");
>>> break;
>>> }
>>> }
>> (A bunch of other versions omitted.)...
>>
>>
>> void classify(char c) {
>> write("You passed ");
>> switch (c) {
>> case '#':
>> writeln("a hash sign.");
>> break;
>> case '0' .. case '9':
>> writeln("a digit.");
>> break;
>> case 'A' .. case 'Z':
>> case 'a' .. case 'z':
>> writeln("an ASCII character.");
>> break;
>> case '.', ',', ':', ';', '!', '?':
>> writeln("a punctuation mark.");
>> break;
>> default:
>> writeln("quite a character!");
>> break;
>> }
>> }
>>
>> This is usable, easy to read -- and the programmer has no problem to
>> remember that .. works differently in case statements than in ranges.
>
> I'd like to keep the (non-required) colon after the first expression in
> a ".." pair of case labels, that is:
>
> case '0': .. case '9':
>
> as opposed to
>
> case '0' .. case '9':
>
> That way it is abundantly clear that the notation has nothing in common
> with expression1 .. expression2. The error message if someone forgot the
> ':' can easily be made clear.
So concatenating ranges would be
case '0': .. case '9': case 'a': .. case 'z':
do something
which then could be written, depending on programmer preferences
case '0':
.. case '9':
case 'a':
.. case 'z':
do something
or
case '0': .. case '9':
case 'a': .. case 'z':
do something
While I'd prefer to omit the colon, I can live with it.
More information about the Digitalmars-d
mailing list