Herby Vojčík wrote:
Brendan Eich wrote:
Herby Vojčík wrote:
That is, these are identical, except the syntax:

r = o.p.q {p: {q: r}} = o
r = o.?p.q {?p: {q: r}} = o
P=o.p; Q=o.?q {p: P, ?q: Q} = o

Here I part company only on syntax:

r = o?.p.q {p?: {q: r}} = o
P=o.p; Q=o?.q {p: P, q?: Q} = o

And of course, the short-hand works:

p=o.p; q=o?.q {p, q?} = o

Oh, now that I see details, I do not like the syntax, because the symmetry of use of ? vanished.

Compare:
    r = o.?p.q    {?p: {q: r}} = o    // in both forms, "?p"
vs,
    r = o?.p.q    {p?: {q: r}} = o    // 1st: "o?"; 2nd: "p?"

You're right, and in CoffeeScript o?.p tolerates null or undefined o.

Given eo.cs:

o = null
o?.p
o?.p.q

`coffee -p eo.cs` shows

(function() {
  var o;

  o = null;

  if (o != null) {
    o.p;
  }

  if (o != null) {
    o.p.q;
  }

}).call(this);

So the ? in ?. really does modify its left operand.

It would be bad to diverge from CoffeeScript by standardizing some other ?. in ES7.

ISTM your equivalence was slightly broken -- but we can fix it:

r = o.p?.q <==>  {p?: {q: r}} = o

To tolerate o = null and o = undefined (which is not what o.p?.q does), the equivalence would be:

r = o?.p.q <==>  {p: {q: r}}? = o

I think this all works and makes sense. On the left, ? goes after the leading object or would-be object, denoted o. On the right, ? goes after the outermost object pattern.

Suffix vs. prefix should be an independent design decision, because ? as prefix should work the same on both sides, ergo, transposing around the operand to make ? a suffix should work the same on both sides.

/be
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to