Existential operator

David Bruant bruant.d at gmail.com
Tue Jun 19 03:13:35 PDT 2012


Le 19/06/2012 11:40, Hemanth H.M a écrit :
> As there is no keyword as 'or' so far, does something like *x = 
> x.value or 5 *sound better?
I realize I gave examples with default values in case of error, but it 
doesn't have to be the case. Specifically in

     let greedy = try obj.hints.greedy

an "or" statement would be cumbersome since there is already 'undefined' 
as implicit or-value.
But why not.

David


>
> On Tue, Jun 19, 2012 at 3:00 PM, David Bruant <bruant.d at gmail.com 
> <mailto:bruant.d at gmail.com>> wrote:
>
>     What about a more generic operator that would be able to silently
>     absorb any error?
>
>        let greedy = obj.hints?.greedy;
>
>     would become:
>
>        let greedy = silent obj.hints.greedy;
>
>     The semantic would be exactly the same.
>     The syntax is up to debate. Specifically, it would be nice to be
>     able to silence a part of an expression.
>     What about a 'try' without a catch?
>
>        let greedy = try obj.hints.greedy
>        let greedy = try{ obj.hints.greedy } || 22;
>
>     This is currently forbidden (I think for 2 reasons, one being that
>     a try must be followed by a catch or finally and the other that
>     try/catch cannot be used as expressions)
>
>     This idea is partly inspired by typeof which silences
>     ReferenceErrors, which I see as a feature YMMV.
>     It is also intended to make programs potentially more robust more
>     easily. For instance, JSON.stringify can throw errors in the rare
>     case of cyclic references. But very few people know that. To make
>     a robust program using JSON.stringify, one would just need to turn:
>
>        let s = JSON.stringify(o)
>
>     into
>
>        let s = try{ JSON.stringify(o) } || DEFAULT_VALUE;
>
>     instead of the current:
>
>        let s;
>        try{
>            s = JSON.stringify(o)
>        }
>        catch(e){
>            // I don't care about the error anyway
>            s = DEFAULT_VALUE;
>        }
>
>     David
>
>
>     Le 18/06/2012 07:11, Brendan Eich a écrit :
>
>         Sorry, meant to start a new thread for:
>
>
>         http://wiki.ecmascript.org/doku.php?id=strawman:existential_operator
>
>         As the Syntax section hints, we can't also adopt
>         CoffeeScript's ?( variant, which enables foo.bar?(args, go,
>         here).baz and the like. The C syntax heritage prevails.
>
>         /be
>
>         Brendan Eich wrote:
>
>             David Herman wrote:
>
>                 On Jun 15, 2012, at 5:57 PM, satyr wrote:
>
>                     On Sat, Jun 16, 2012 at 4:33 AM, David Herman
>                     <dherman at mozilla.com <mailto:dherman at mozilla.com>
>                     <mailto:dherman at mozilla.com
>                     <mailto:dherman at mozilla.com>>> wrote:
>
>                        As for null, I can see how there's confusion
>                     about whether to use
>                        null vs undefined, and so I can see why
>                     CoffeeScript would just
>                        try to blur the distinction between them.
>
>
>                     Not just for blurring. Rejecting `null` is
>                     essential for CoffeeScript's "existence" due to
>                     `?.`, the soak/safe access operator.
>
>
>                 I think you could make a case for ?. defaulting for
>                 both but ?? defaulting only undefined. The case goes
>                 something like this:
>
>                 - The purpose of ?? is to provide a default value when
>                 no value was provided. The way to say "no value" in
>                 JavaScript is undefined.
>
>                 - The purpose of ?. is to fail soft when doing a
>                 property lookup. Both null and undefined throw when
>                 doing a property lookup.
>
>
>             Agreed. This is one choice, it's plausible because of the
>             distinction between defaulting (which requires intentional
>             passing of a "please default" sentinel value, or not
>             passing a trailing actual argument) and soaking up
>             null-or-undefined.
>
>             Yes, we could make ?? and ??= do the same for null as for
>             undefined. I'm not sure that's the right choice, but it's
>             a choice. For foo.bar?.baz, though, the clearer choice is
>             to avoid throwing, which means evaluating to undefined if
>             foo.bar is missing (evaluates to undefined) *or* has a
>             value not coercible to object type (null or undefined). See
>
>             http://wiki.ecmascript.org/doku.php?id=strawman:existential_operator
>
>             /be
>             _______________________________________________
>             es-discuss mailing list
>             es-discuss at mozilla.org <mailto:es-discuss at mozilla.org>
>             https://mail.mozilla.org/listinfo/es-discuss
>
>         _______________________________________________
>         es-discuss mailing list
>         es-discuss at mozilla.org <mailto:es-discuss at mozilla.org>
>         https://mail.mozilla.org/listinfo/es-discuss
>
>
>     _______________________________________________
>     es-discuss mailing list
>     es-discuss at mozilla.org <mailto:es-discuss at mozilla.org>
>     https://mail.mozilla.org/listinfo/es-discuss
>
>
>
>
> -- 
> /'I am what I am because of who we all are'/
> h3manth.com <http://www.h3manth.com>
> /-- Hemanth HM/

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20120619/85062308/attachment-0001.html>


More information about the es-discuss mailing list