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