<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Jun 11, 2013, at 11:07 AM, Andrea Giammarchi wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div dir="ltr">so you are saying instanceof would be bad while 'nextable' (same 'thenable' concept) is a better approach?</div></blockquote><div><br></div><div>of course</div><div><br></div><blockquote type="cite"><div dir="ltr"><div><br></div><div style="">Ages ago, I was using PHP SPL a lot and found the interface approach very simple and nice, it's more suitable for Proxy objects in JS though... that's why I've talked about mixin, to drop repeasted code that will implement same thing for every ArrayLike object: <a href="http://www.php.net/manual/en/class.iterator.php">http://www.php.net/manual/en/class.iterator.php</a> (Empty Iterator)</div>
<div style=""><br></div><div style="">I also think is hard to distinguish between for/in'able' and for/of'able' since first kind always worked with pairs/entries like objects while second seems to be more ... well ... complicated for no concrete reason (from a user prospective)</div></div></blockquote><div><br></div><div>All objects are for/in-able since for/in uses a MOP level operation that all object must support. There is nothing you can do to change its behavior short of using a Proxy. There isn't really very much conceptual complexity to  Iterable/Iterator.  The most important concept is that for any specific object abstraction there can be many meaningful ways to "iterate" over the information it provides. Iterator access method (keys, values, items, anything you want to define) provide a what to select a particular form of iteration.  An iterator objet  simply represents a specific active iteration over a particular object.</div><div><br></div><div>Perhaps the similarity of the words "Iterator" and "Iterable" causes some confusion.  I think it's fine if you want to think of "Iterable" as being equivalent to saying "nextable".</div><div><br></div><br><blockquote type="cite"><div dir="ltr">
<div style=""><br></div><div style="">In any case, if a generic next(){} function to attach to any instance would make it iterable then is fine and easy enough to explain.</div></div></blockquote><div><br></div><div>You don't attach a generic next method, you simply define an appropriate one.</div><div><br></div><div>Allen</div><div><br></div><br><blockquote type="cite"><div dir="ltr"><div style=""><br></div><div style="">cheers</div></div>
<div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Jun 11, 2013 at 11:01 AM, Allen Wirfs-Brock <span dir="ltr"><<a href="mailto:allen@wirfs-brock.com" target="_blank">allen@wirfs-brock.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><br><div><div class="im"><div>On Jun 11, 2013, at 10:22 AM, Andrea Giammarchi wrote:</div>
<br><blockquote type="cite"><div dir="ltr">I believe Iterator should be an interface and not a class so I could extend Array or ArrayLike implementing Iterator, when/if necessary, in order to have a for/of compatible class.<div>
<br></div><div>We don't have interfaces ... I know, we could have mixins though, compatible with @@things too.</div></div></blockquote><div><br></div></div>Even if we had an Iterator abstract class, it would simply be there as an connivence for Iterator implementors.  I would never specify for-of as doing a instanceof-like check on Iterator.  Duck-typing is what is need in this situation.</div>
<div><br></div><div>While we don't have interfaces as a linguistic form,  we use implicit interfaces all the time.  Any duck-typing check, whether explicit or implicit (via an unguarded method call) is conceptually checking for an implicit interface.</div>
<span class="HOEnZb"><font color="#888888"><div><br></div><div>Allen</div></font></span><div class="im"><div><br></div><div><blockquote type="cite"><div dir="ltr">
<div><br></div><div>My 2 cents</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Jun 11, 2013 at 9:41 AM, Brandon Benvie <span dir="ltr"><<a href="mailto:bbenvie@mozilla.com" target="_blank">bbenvie@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>On 6/11/2013 5:50 AM, Tab Atkins Jr. wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On Tue, Jun 11, 2013 at 2:08 AM, Axel Rauschmayer <<a href="mailto:axel@rauschma.de" target="_blank">axel@rauschma.de</a>> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On the other hand, turning every iterator into an iterable puts the burden<br>
on people implementing iterators: they have to implement the iterable<br>
interface.<br>
</blockquote>
That's... not really a burden.  It's literally just adding an<br>
@@iterator method whose body is "return this;".  It's the right place<br>
to put the burden, too - manual iterator authors are much, much fewer<br>
than for-of users.<br>
</blockquote>
<br></div>
It may be worth noting that, while it hasn't made it into the ES6 spec (yet?), the iterators strawman [1] (and modules_standard strawman [2]) had an `Iterator` class that all the builtin iterators (Map, Set, Generator, etc.) inherited from who's prototype had @@iterator built in. So usually the only burden for iterator authors was to create a class that inherited from Iterator.<br>


<br>
    import { Iterator } from '@iter';<br>
    class MyIterator extends Iterator { /*...*/  }<br>
<br>
<br>
[1] <a href="http://wiki.ecmascript.org/doku.php?id=harmony:iterators" target="_blank">http://wiki.ecmascript.org/<u></u>doku.php?id=harmony:iterators</a><br>
[2] <a href="http://wiki.ecmascript.org/doku.php?id=harmony:modules_standard" target="_blank">http://wiki.ecmascript.org/<u></u>doku.php?id=harmony:modules_<u></u>standard</a><div><div><br>
______________________________<u></u>_________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/<u></u>listinfo/es-discuss</a><br>
</div></div></blockquote></div><br></div>
_______________________________________________<br>es-discuss mailing list<br><a href="mailto:es-discuss@mozilla.org" target="_blank">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></div></div></blockquote></div><br></div>
</blockquote></div><br></body></html>