Russell Leggett wrote:
Options type objects:
    let {url,callback,?errback} = options;
This lets you very clearly decompose an object and declaratively show which values are optional and which ones are not. If all of them are optional, the ? would just go to the left of the brace, but really this should be the minority case for most situations.

Dave and I had talked about prefix-? as applying only to property names, since that covers all but the top level for object patterns:

  {required, ?optional_shallow}
  {required, ?optional_deep: {foo, bar, ?baz}}

but of course it leaves out the top level.

If we make prefix-? apply to the "value" side of the ":" (which in object patterns is optional, but if present names the binding not the property), then we have

  {required, optional_shallow: ?renamed_optional_shallow}
  {required, optional_deep: ?{foo, bar, ?baz}}

and the object shorthand would still be wanted:

  {required, ?optional_shallow}

This is a strictly larger grammar, though. If we can keep prefix-? in the property name side, then all we lose is the top level.

Array patterns don't have explicit "0", "1", "2", etc., property names, though so either prefix-? doesn't work, or you have to use an object pattern (which works on array values), or else prefix-? goes before the binding name (the "value" side) as above.

A disparate list of possible types of matches. This is common in "overloaded" functions where the number and type of arguments can be wildly different. This is probably the strongest case against refutable matching, because it is so likely to result in mismatches which should have logic performed on them instead of having an error thrown.

Right, this minority case could be left out. The array pattern situation is stronger motivation for prefix-? applying to bindings not property names.

/be
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to