Project Elvis

meppl mephisto at nordhoff-online.de
Fri Nov 10 19:59:29 UTC 2017


On Friday, 10 November 2017 at 05:23:53 UTC, Adam Wilson wrote:
> On 11/6/17 12:20, Michael wrote:
>> I can't quite see why this proposal is such a big deal to 
>> people - as
>> has been restated, it's just a quick change in the parser for 
>> a slight
>> contraction in the code, and nothing language-breaking, it's 
>> not a big
>> change to the language at all.
>>
>> On Monday, 6 November 2017 at 19:13:59 UTC, Adam Wilson wrote:
>>> I am all for the Elvis operator, however I have two 
>>> reservations about
>>> it. The first is that I don't see much use for it without a
>>> null-conditional. The second is that the current proposed 
>>> syntax ?: is
>>> MUCH to easily confused with ?.
>>>
>>> This is not easy to read: obj1?.obj2?.prop3?:constant.
>>>
>>> When designing syntax sugar, ergonomics are very important, 
>>> otherwise
>>> people won't use it. Microsoft spent a LOT of time and 
>>> treasure to
>>> learn these lessons for us. I see no reason to ignore them 
>>> just
>>> because "we don't like Microsoft"
>>>
>>> My proposal would be to copy what MSFT did, expect that I 
>>> would I
>>> would introduce both operators at the same time.
>>>
>>> Syntax as follows: obj1?.obj2?.prop3 ?? constant
>>>
>>> In practice I don't see much use of the idiom outside of 
>>> null's. The
>>> ONLY other thing that would work there is a boolean field and 
>>> you
>>> might as well just return the boolean itself because the 
>>> return values
>>> have to match types.
>>
>> I feel this is kind of embellished somewhat. When you write
>>
>>> This is not easy to read: obj1?.obj2?.prop3?:constant.
>>
>> you're not separating it out as you do when you write your 
>> preferred
>> version:
>>
>>> Syntax as follows: obj1?.obj2?.prop3 ?? constant
>>
>> How is
>>
>>> obj1?.obj2?.prop3 ?: constant
>>
>> not as easy to read as
>>
>>
>>> obj1?.obj2?.prop3 ?? constant
>>
>
> You're right, I didn't, that was intentional, because sometimes 
> people write things like that. And it took a while for anyone 
> to say anything about it. That is my point.
>
> But that's the thing. The ?? is significantly more obvious in 
> the condensed version.
>
> This is something that a UX designer would recognize instantly, 
> but human factors are very definitely not our strong skill as 
> engineers. FWIW, my human factors experience comes from the 
> deep study of airline crashes that I do as a pilot.
>
>> to me they are the same in terms of readability, only with ?? 
>> you have
>> greater chances of mistyping and adding a second ? in there 
>> somewhere,
>> whereas the ?: is just a contraction of the current syntax, I 
>> really
>> don't think it's that difficult, so I'm not sure what people's 
>> hang-ups
>> are, but I don't think the argument that ?? is easier to read 
>> than ?:
>> holds any weight here, because one *is* a change to the 
>> language, and
>> the other is a change to the parser and a contraction of a 
>> standard
>> convention.
>>
>
> Two things. ?: is ALSO a change a to language (lexer+parser). 
> As to the whole "it's no more likely to typo the colon than the 
> question" argument, sure, but that depends on the keyboard 
> layout more than anything else, what works for you may not work 
> elsewhere. And in either case, it's an easy compiler error. So 
> you don't win anything with the ?:, but you win readability 
> with the ??. MSFT spends a LOT of time studying these things. 
> It would be wise to learn for free from the money they spent.

I still dont get your point. Are you sure `??` isn't more 
readable for you, because you are just used to it?

I think `?:` makes more sense to me and people who learn the D 
programming language.
At least As log as `null` becomes `false` and non-null-pointer 
becomes `true`.

If the operator shall check for `null` only, I would be fine with 
`??`.
Because then it wouldn't be a true shortcut of  
https://dlang.org/spec/expression.html#ConditionalExpression  
anymore

I wonder what Mr. Bright and Mr. Alexandrescu would say about the 
request to implement both, `??` and `?:`.


More information about the Digitalmars-d mailing list