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 <bruan...@gmail.com <mailto:bruan...@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
                    <dher...@mozilla.com <mailto:dher...@mozilla.com>
                    <mailto:dher...@mozilla.com
                    <mailto:dher...@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@mozilla.org <mailto:es-discuss@mozilla.org>
            https://mail.mozilla.org/listinfo/es-discuss

        _______________________________________________
        es-discuss mailing list
        es-discuss@mozilla.org <mailto:es-discuss@mozilla.org>
        https://mail.mozilla.org/listinfo/es-discuss


    _______________________________________________
    es-discuss mailing list
    es-discuss@mozilla.org <mailto:es-discuss@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/

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

Reply via email to