# The Existential Operator

Dmitry Soshnikov dmitry.soshnikov at gmail.com
Tue May 20 11:08:41 PDT 2014

```Woah! :) 2012 -- so I correctly recalled "couple of years ago". Thanks,
glad it was discussed in detail.

On Tue, May 20, 2014 at 9:36 AM, Brendan Eich <brendan at mozilla.org> wrote:

> Dmitry Soshnikov wrote:
>
> Will the "Existential Operator" for properly accessors be something
> interesting to consider for ES7 spec? Currently CoffeeScript uses it well.
>
>
>
> http://esdiscuss.org/topic/sept-18-tc39-meeting-notes#content-2
>
> and find "ARB: This is non-compositional". Citing text for reader
> convenience:
>
> Existential Operator (strawman discussion)
>
> (Presented by Brendan Eich, Mozilla)
>
> Significant desire include a null and undefined check in syntax/operator
> form (a la coffeescipt)
>
>     o = {}
>     r = o?.p.q.r
>     r = o?.p?.q.r
>
> Mixed discussion about the needs and use cases as they apply to
> coffeescript code.
>
> ARB: This is non-compositional
>
>     o = {}
>     r = o?.p.q.r
>     r = (o?.p).q.r
>     r = o?.p.q.r()
>
> Results in…
>
>     var o, r;
>     o = {};
>     r = o != null ? o.p.q.r : void 0;
>     r = (o != null ? o.p : void 0).q.r;
>     r = o != null ? o.p.q.r() : void 0;
>
> Non-starter.
>

Yeah, that's the semantics CoffeeScript uses.

> DH: Why not an operator that needs to be explicit?
>
>     o?.p?.q?.r
>
> LH: Why would you ever even use it on the first?
>
> BE: Forget all of the problems with coffeescript's impl, the need exists.
>

OK.

> YK: In the common cases, where it works, it works well. Where it doesn't,
> it falls apart unexpectedly.
>
> WH: What about other contexts such as p?[x], p?.q[x], and p?(x) ? [Note
> that grammar problems arise for some of those.]
>
The grammar can be tweaked seems.

> General agreement.
>
> *Conclusion/Resolution* Seems useful, but not now. Semantics are unclear
>
Yeah, so now, when ES6 is closed, probably the topic can be reiterated
later on for ES7.

> ---
>
> The notes ended a bit too optimistically in my view! "Non-starter".
>
>
Yeah, for ES6 it's pretty optimistically :)

OK, thanks again for clarifying this Brendan, and for putting the notes
here, appreciated.

The only reason I put the topic here, is (not to beat a dead horse of
it. I first thought, that we could just implement an internal JS extension
for now, and see how it goes (and if it goes well, potentially include it
into ES7), but, true, it needs more clarifications and thoughts.

(still doable though)

Dmitry
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20140520/51e273f3/attachment-0001.html>
```