Existential operator (was: ||= is much needed?)
brendan at mozilla.org
Tue Jun 19 11:58:03 PDT 2012
That's possible but it is a bit ugly, isn't it?
Also, as dherman observed, ?. and variations are different from
defaulting, in one point of view. That is, avoiding dereferencing a
value that does not coerce to object is the purpose of ?. but not
necessarily of ??= (or || as used for defaulting today).
We could use ?obj as a prefix form for testing whether obj is not null
or undefined, but it would then lead to doubled ?? when put in the
"then" part of a ?: ternary.
Using ?? as a suffix form is even uglier in a ternary: obj???wut:lol.
We already have obj != null for testing whether obj is not null or
undefined, so that takes away a lot of the pressure for unary ??.
My current thinking is:
(a) ?? and ??= as proposed in
(b) ||= as a freebie since || is in the language and useful for
falsy-defaulting (latent bugs notwithstanding).
(c) ?. as proposed in
(d) obj.maybeMethod?.(args) for what CoffeeScript calls ?(.
Domenic Denicola wrote:
> What struck me from Jeremy's explanation was the uniformity of CoffeeScript's ? operator (modulo the small issue he mentioned for function calls). It seems to combine the currently-strawman'ed ??/??= and ?. into one very simple semantic.
> What about adopting ?? as CoffeeScript's ? operator? Would this solve the lookahead problems? So you could do
> This would unfortunately imply, for uniformity, that
> object ?? other
> object ??= other
> become null + undefined tests instead of just undefined. But that might be worth paying.
> For the record that leaves object?? as the only unimplemented CoffeeScript counterpart.
More information about the es-discuss