On Tue, 19 May 2009 06:39:23 +0400, Andrei Alexandrescu <seewebsiteforem...@erdani.org> 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. > > > Andrei Will it be possible to write like this? void classify(char c) { write("You passed "); switch (c) { case '0': .. case '9': writeln("a digit."); break; case 'A': .. case 'Z': writeln("upper case ASCII character."); break; case 'a': .. case 'z': writeln("lower case ASCII character."); break; case '.', ',', ':', ';', '!', '?': writeln("a punctuation mark."); break; default: writeln("quite a character!"); break; } } Looks cool!