On Wednesday, 19 July 2017 at 15:39:02 UTC, Steven Schveighoffer
wrote:
On 7/19/17 9:30 AM, sontung wrote:
[...]
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
Now that I think about an extension of the comma makes more sense:
if (int i=foo(), i<42) ...
It is exactly the idea that we are trying to convey here (except
that, deprecated comma aside, it doesn't work because of scope
issues: i in i<42 is considered undefined).
Given that the comma will never die and that it conveys exactly
the idea I think think it should be prefered to the semi-colon.