The Comma Operator's Deprecation Can't Come Soon Enough

John Colvin via Digitalmars-d digitalmars-d at puremagic.com
Tue Jul 15 11:50:07 PDT 2014


On Tuesday, 15 July 2014 at 18:08:15 UTC, Martin Krejcirik wrote:
>>
>> Example?
>>
>
> For loop with multiple variables and various one liners of 
> questionable utility aside:
>
> import std.stdio;
>
> bool funk()
> {
>     static int count;
>     return ++count > 1 ? true : false;
> }
>
> void main()
> {
>     bool flag = false;
>     if (flag && funk)
>         writeln("a");
>     else if (flag=true, flag && funk)
>         writeln("b");
>     else if (flag && funk)
>         writeln("c");
> }

cute, but I'd still prefer this

void main()
{
     bool flag = false;
     if (flag && funk)
         writeln("a");
     else
     {
         flag = true;
         if (flag && funk)
             writeln("b");
         else if (flag && funk)
             writeln("c");
     }
}

and not just because I don't like the comma. I'd say it's 
generally bad practice to hide that write to `flag` inside the if 
condition. By spreading it out it is clear that the different 
conditions are evaluated with different external state.

The comma operators entire job is to inject state changes where 
the reader doesn't expect them. It's a misfeature of C that we've 
sadly inherited and should rid ourselves from.


More information about the Digitalmars-d mailing list