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