On Jun 20, 2012, at 7:18 AM, John Tamplin wrote:
> On Tue, Jun 19, 2012 at 1:34 PM, Jeremy Ashkenas <[email protected]> wrote:
> Allen asks about when you would want to write `foo?.bar()`
>
> ... the only use case I can think of is when `foo` may or may not be defined,
> and you know that if it *is* defined, it's going to have a `bar` method on
> it, and if it *is* defined, you want to call `bar` for its side effects. A
> bit far fetched.
>
> It doesn't seem that far-fetched to me -- I seem to constantly write things
> like this in Java:
>
> String name = (person != null) ? person.getName() : null;
>
> IIUC, that could just be written as String name = person?.getName() if this
> operator were avaialble.
>
> Maybe you are saying that you don't want to have rigid class structures in
> JS, but it seems reasonable that if you know person is of type Person it is
> supposed to have a getName method on it.
yes, but in a static Java-like language such as for you example above, the
existence of person implies the existence of the getName method. The JS
equivalent would likely be something like:
name = (person && person.getName) ? person.getName() : undefined;
using ?. as defined by Brendan this could be:
name = (person?.getName) ? person.getName( ) : undefined;
I've been arguing that ?. and () could be defined such that the above statement
could instead be reduced to:
name = person?.getName();
However, by Brendan's semantics this reduced form would be equivalent to:
name = (person && person.getName) ? person.getName() : throw new TypeError;
I was hypothesizing that Brendan's semantics would seldom be the programer's
intent for person?.getName() . If an exception was acceptable, why wouldn't you
just say:
name = person.getName();
Allen
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss