On Apr 19, 2012, at 4:16 PM, David Herman wrote:

> On Apr 19, 2012, at 2:18 PM, Allen Wirfs-Brock wrote:
> 
>> //initialize some variable with default objects
>> let {
>>    unidentifedAdult: mom,
>>    unidetifiedAdult: dad, 
>>    unidentiedChild: brother,
>>    unidentifiedChild: sister
>>    } = peopleConstants;
>> 
>> why is this less desirable than:
>> 
>> //initialize some variable with default objects
>> let mon = peopleConstants.unidentifiedAdult,
>>     dad = peopleConstants.unidentifiedAdult,
>>     brother = peopleConstants.unidentifiedChild,
>>     sister = peopleConstants.unidentifiedChild;
> 
> Well, it's rare that you *need* to re-evaluate the dot-pattern. It saves 
> typing, repetition (DRY!), side-effects, and running time to evaluate each 
> selector only once:
> 
>    let mom = peopleConstants.unidentifiedAdult,
>        dad = mom,
>        brother = peopleConstants.unidentifiedChild,
>        sister = brother;
> 
DRY isn't the only principle in play in situations like this.  

   let mom = peopleConstants.unidentifiedAdult,
       dad = mom,

Expresses a coupling between dad and mom that may not actually be inherent in 
the actual problem domain. If we change the initialization of mom and we will 
also change the initialization of dad. If I want to couple them in that manner, 
I would probably say:
    let dad = mom = peopleConstants.unidentifiedAdult;

Also chains of indirection may programs harder to understand when reading them. 

The example intentionally used an object pattern that looked like a namespace. 
If you have to worry about side-effects of namespace element accesses you're 
already screwed. I wouldn't go out of my way to minimize reevaluation of access 
of namespace elements unless you have identified it is being in a hot loop. We 
all know the premature optimization mantra. 

It really doesn't matter what your or my preferred style might me.  There are 
many reasonable coding style and engineering trade-offs.  The point was that 
there is nothing inherently "bad" about the first alternative above and that 
somebody might choose to adopt that idiom.  JS is a vary tolerant language.  
Given everything else we allow, why should be forbid this?

> And you should be able to do that just fine with nested as-patterns:

Clearly there are other ways, but why forbid the one above?

> 
>    let { unidentifiedAdult: mom as dad, unidentifiedChild: sister as brother }
> 
> or
> 
>    let { undentifiedAdult as mom as dad, unidentifiedChild as sister as 
> brother }
> 

I actually  I found
      propertyName :  bindingIdentifier as bindingPattern

(do I have the subparts right?) somewhat confusing at first and I think other 
might also.  What is the difference between : and |as|?  Why are different 
things allowed after each?  Only one |as|?  I actually think your second 
alternative is clearer but why not:

 let {unidentifiedAdult : mom : dad : auntie, unidentifiedChild : sister : 
brother} = peopleComstants.

If you think about destructuring simply as an alternative initialization syntax 
that seems to make more sense.  Essentially : and = are duals that operate in 
opposite directions:

       let {unidentifiedAdult : mom : dad : auntie} = peopleComstants;  //right 
to left initialization
vs
       let mom = dad = auntie = peopleComstants. unidentifiedAdult;  //left to 
right initialization

Allen








> Dave
> 
> 

_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to