If Statement with Declaration
Steven Schveighoffer via Digitalmars-d
digitalmars-d at puremagic.com
Wed Jul 19 08:39:02 PDT 2017
On 7/19/17 9:30 AM, sontung 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?
I really like the idea. Only thing I don't like is the possibility for
abuse/confusion/errors:
if(int i = someFunc(); j >= 0) // typo, or weird relationship, or just
intentional obfuscation?
It reminds me a bit of why we got rid of the comma operator.
This is why I've liked suggestions in the past like:
if((int i = foo()) >= 0)
That is, you want to use 'if' on an expression while saving the
expression, but the if is only looking at a property of that expression.
Note this makes if(arr) (the correct meaning, that is ;) much more
palatable:
if((auto x = getArray()).length)
Don't get me wrong, if this syntax is what gets this idea in, I'm fine
with it.
One possibility is to require usage of the declared variable in the
condition.
-Steve
More information about the Digitalmars-d
mailing list