Re: ||= is much needed?

2012-06-17 Thread David Herman
On Jun 15, 2012, at 5:57 PM, satyr wrote:

 On Sat, Jun 16, 2012 at 4:33 AM, David Herman 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.

Dave

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


Re: ||= is much needed?

2012-06-17 Thread Brendan Eich

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 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
https://mail.mozilla.org/listinfo/es-discuss


Existential operator (was: ||= is much needed?)

2012-06-17 Thread Brendan Eich

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 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
https://mail.mozilla.org/listinfo/es-discuss


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