If Statement with Declaration

Jerry via Digitalmars-d digitalmars-d at puremagic.com
Fri Nov 4 10:46:55 PDT 2016


On Friday, 4 November 2016 at 16:15:21 UTC, Steven Schveighoffer 
wrote:
> It's just a strawman type, I'm sure there's ways to handle 
> these things, I just didn't put a lot of effort into all the 
> cases.
>
> But really it's just syntax to separate the bool check from the 
> value itself. You can get more elaborate if you want with the 
> comparison. The difficult thing is having a type that you use 
> normally, but that when you use in an if statement, it gives 
> what you want. And declaring that type in the if clause itself 
> (which is allowed in restricted circumstances).
>
> This also isn't exactly ideal for things like int, as if(i) 
> would now be unexpected.

It is just a basic type but ultimately you will probably need 
more than one type with a different way of operating to get the 
same behavior. That and having part of the code as a string which 
makes it harder to read and no syntax highlighting for the code 
in text editors/ides.

What do you mean if(i) would be unexpected?

> I thought you could only declare variables in the first clause?
>
> In any case, I think Stefan really has the best answer:
>
> {int value; if(auto i = someFunc(&value))
> {
>     // ...
> }}
>
> Sure, it doesn't look great. But my expectation is that your 
> proposal doesn't pull enough weight to be integrated into the 
> language. There are enough ways to solve this problem that 
> don't involve language changes.
>
> -Steve

It follows the same rules for an if statement condition which an 
if statement allows "if(auto i = foo())".

It's syntactic sugar, most of the existing language features 
don't serve a functional purpose. They simply serve to simplify 
another syntax. Every "foreach" statement could be written as a 
for-statement. Every for-statement could be written as a 
while-statement. And so on so forth. It doesn't add anything that 
new either. It follows the same syntax as a for-statement.

It's not that big of a language feature, it's just a small 
syntactic change, which comes down to. Is this easier to read 
compared to this.

     {int value; if(auto i = someFunc(&value))
     {
         // ...
     }}

vs.

     if(int value; auto i = someFunc(&value))
     {
         // ...
     }


I think it makes it easier to read and it fits with how the 
for-statement operates. I write code everyday that could utilize 
this if-statement syntax, so I thought I might as well bring it 
up. But if there isn't that much interest in it then I won't 
bother with a DIP.


More information about the Digitalmars-d mailing list