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