<br><br><div class="gmail_quote">On Tue, Sep 27, 2011 at 10:30 PM, Brendan Eich <span dir="ltr"><<a href="mailto:brendan@mozilla.com">brendan@mozilla.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

<div class="im">On Sep 27, 2011, at 4:06 PM, Waldemar Horwat wrote:<br>
<br>
> Trying to understand Oliver's objections to the current class proposal.<br>
<br>
</div>Oliver objects, as do others, to "punning" (my word) declarative syntax to define object properties, and mixing static and dynamic influences. He specifically cited the location of public exportable-definitions in the constructor body, instead of in the class body.<br>


<br>
We then discussed how putting public x,y; for a class Point in the class body requires separate assignments in the constructor body.</blockquote><div><br></div><div>At some point, didn't we discuss borrowing a bit from CoffeeScript and supporting this shorthand:</div>

<div><br></div><div><font class="Apple-style-span" face="'courier new', monospace">  class Point {</font></div><div><font class="Apple-style-span" face="'courier new', monospace">    public x, y;</font></div>

<div><font class="Apple-style-span" face="'courier new', monospace">    constructor(this.x, this.y) {} // <-- assigns args to instance fields</font></div><div><font class="Apple-style-span" face="'courier new', monospace">  }</font></div>

<div><br></div><div>If we were feeling crazy, we could go further (similar to Scala) and allow:</div><div><br></div><div><div><font class="Apple-style-span" face="'courier new', monospace">  class Point {</font></div>

<div><span class="Apple-style-span" style="font-family: 'courier new', monospace; ">    constructor(public x, public y) {}</span></div><div><font class="Apple-style-span" face="'courier new', monospace">  }</font></div>

</div><div><font class="Apple-style-span" face="'courier new', monospace"><br></font></div><div>That gives you a declarative form, constructor argument, and initialization all in one place.</div><div><br></div><div>

- bob</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"> Without type annotations (guards) the public declaration is easy to leave out -- it seems optional or unnecessary. And in the case of const (public const K) there's no way to initialize with a constructor parameter or other per-construction state. Anyway, this was the counter-argument, heard before.<br>


<br>
Oliver, anything to add?<br>
<br>
/be<br>
_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</blockquote></div><br>