If Statement with Declaration

Steven Schveighoffer via Digitalmars-d digitalmars-d at puremagic.com
Fri Nov 4 07:10:51 PDT 2016


On 11/3/16 6:29 PM, Jerry wrote:
>
> So I was thinking of a way of extending if statements that have
> declarations. The following being as example of the current use of if
> statements with declarations:
>
>     if(int* weDontPollute = someFunc())
>     {
>          // use weDontPollute
>     }
>
> That's great and all, but it only works by checking if the variable
> evaluates to true or false. Which is fine for a pointer but otherwise
> useless for anything else, like integers where zero is usually valid
> input (index for array). So currently the only way to do something like
> this in the language, that i've found, is to use a for statement.
>
>     for(int i = someFunc(); i >= 0;)
>     {
>         // use i
>
>         break;
>     }
>
> Not that ideal to use a for statement. It makes it hard to read and if
> the break condition isn't there it might very well be an infinite loop.
> So I was thinking of some sort of syntax like this:
>
>     if(int i = someFunc(); i >= 0)
>     {
>         // use i
>     }
> Thoughts on this sort of feature?


Hm... what about something like:

struct BoolCond(T, string cond)
{
    T val;
    bool opCast(B)() if(is(B == bool))
    {
      return mixin("val " ~ cond);
    }
}

auto boolcond(string cond, T)(T val)
{
    return BoolCond!(T, cond)(val);
}

if(auto i = someFunc.boolcond!(">= 0"))
{
    ... // use i
}

-Steve


More information about the Digitalmars-d mailing list