github at esdiscuss.org (2013-07-12T02:26:27.587Z)
This is like C#'s current / moveNext, which was discussed at the May 2011 TC39 meeting, and then again last September. See [here](https://mail.mozilla.org/pipermail/es-discuss/2012-September/025241.html) > Rehashed Java (hasMore/getNext) and C# (Current/MoveNext) protocols involving two methods, which costs more for implementors (groups 2 and 3, however ordered) and adds incoherence hazard (two methods get out of sync; C# tries to mitigate common mistake with Java's, but still has dual out-of-sync hazard to Java's). > > MM agreed with BE that Python's is simplest given other constraints we can't change, or "least bad". Changing from hasMore/getNext to current/moveNext does not eliminate two methods that can get out of sync. You can imagine one is a property, not a method, but the general case is a getter or C#-style Current method.
This is like C#'s current / moveNext, which was discussed at the May 2011 TC39 meeting (see ), and then again last September. See https://mail.mozilla.org/pipermail/es-discuss/2012-September/025241.html """ Rehashed Java (hasMore/getNext) and C# (Current/MoveNext) protocols involving two methods, which costs more for implementors (groups 2 and 3, however ordered) and adds incoherence hazard (two methods get out of sync; C# tries to mitigate common mistake with Java's, but still has dual out-of-sync hazard to Java's). MM agreed with BE that Python's is simplest given other constraints we can't change, or "least bad". """ Changing from hasMore/getNext to current/moveNext does not eliminate two methods that can get out of sync. You can imagine one is a property, not a method, but the general case is a getter or C#-style Current method. /be Domenic Denicola wrote: > I know `StopIteration` is pretty baked in by now. But, most of the arguments I can recall for it are that it’s better than `hasNext` + `next`, wherein you have to keep two methods in sync. I saw the Dart iterator API the other day and it provided a third alternative I thought the list might enjoy contemplating: > > https://www.dartlang.org/articles/m3-whats-new/iterables.html#iterator > > Translated to ES6, an iterable that counts to 5 it would look like: > > import { current, next } from "@iter"; > > let iterable = { > [next]() { > if (this[current]< 5) { > this[current]++; > } > return this[current]<= 5; > }, > [current]: 0 > }; > > That is, `next` does all the work, returning `true`/`false` to signal whether the iteration should proceed. It then keeps `current` in sync with the current value. > > Interesting, if perhaps too late for ES6. I'd of course love to hear why `StopIteration` is better than this, so I can understand and defend it better. > _______________________________________________ > es-discuss mailing list > es-discuss at mozilla.org > https://mail.mozilla.org/listinfo/es-discuss