optional assignment
Basile B.
b2.temp at gmx.com
Thu Jan 2 16:52:01 UTC 2025
On Tuesday, 31 December 2024 at 18:10:52 UTC, Paul Backus wrote:
> On Monday, 30 December 2024 at 15:07:41 UTC, Basile B. wrote:
>> A common pattern in a world where `null` exists is
>>
>> ```d
>> if (!a)
>> a = b;
>> ```
>> [...]
>>
>> I propose the get rid of the statement layer. The two
>> statments (there are more actually) can be a single expression:
>>
>> ```d
>> a ?= b;
>> ```
>
> ```d
> ref optAssign(T, U)(ref T dest, U value)
> {
> if (!dest) dest = value;
> return dest;
> }
>
> unittest
> {
> int n;
> int* p;
>
> n.optAssign(123);
> assert(n == 123);
> n.optAssign(456);
> assert(n == 123);
>
> p.optAssign(&n);
> assert(*p == 123);
> p.optAssign(new int(456));
> assert(*p == 123);
> }
> ```
Paul while your template is somewhat equivalent, I have doubts
over people using it ;)
The first problem I see is that it will be inline-ed only with
certains command line arguments, while the proposed expression
does not involved a call, or `-O`, or `-inline`.
More information about the dip.ideas
mailing list