proposal: short => rewrite for function declarations

Andre Pany andre at s-e-a-p.de
Sat Oct 10 10:25:05 UTC 2020


On Saturday, 10 October 2020 at 10:18:15 UTC, claptrap wrote:
> On Friday, 9 October 2020 at 14:44:25 UTC, Adam D. Ruppe wrote:
>> After a brief chat yesterday, I slapped this together:
>>
>> https://github.com/dlang/dmd/pull/11833
>>
>> In short, in a function declaration, it rewrites `=> ...;` 
>> into `{ return ...; }`
>>
>> One benefit is shorter property accessors:
>>
>>     private int _x = 34;
>>     @property x() => _x;
>>     @property x(int v) => _x = v;
>>
>> But it also works basically anywhere
>>
>>     bool isNull() => this is null;
>>     auto identity(T)(T a) => a;
>>     @property y() in(true) => _x; // contracts still work too
>>
>> So it just extends the existing lambda shorthand to full 
>> declarations too.
>>
>> See more in the PR description and the test case there.
>
> From the recent discussions I got the impression that needless 
> syntax sugar shouldn't be added any more. To get new features 
> in it needs to be something that cant be done with existing 
> language features, or it needs to fix something.
>
> So doesn't this just add more "stuff" for no meaningful benefit?
>
> I couldnt care less about
>
> @property x() => _x;
>
> vs
>
> @property x() { return -x; }
>
> cause the important thing to me is that my code is simple, 
> readable, expressive, i dont care about saving 7 chars on a one 
> liner.

I assume, if you follow the style guide, the second example 
should be written with 4 lines:

@property x()
{
     return -x;
}

While the proposal from Adam is a 1 liner also from a style guide 
perspective:

@property x() => _x;

(Yes, this is nitpicking... but for me the reason why I like the 
proposal).

Kind regards
Andre





More information about the Digitalmars-d mailing list