+1000<div><br></div><div>Classic feature creep with basically zero application.<span></span><br><div><br>On Thursday, 3 November 2016, Isiah Meadows <<a href="mailto:isiahmeadows@gmail.com">isiahmeadows@gmail.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><p dir="ltr">Could we just *not* have a `String.range`?</p>
<p dir="ltr">1. Needing a list of alphabetically sorted characters is a bit niche, even in the Latin alphabet.<br>
2. It's ambiguous whether it should include symbols or not. (think: `String.range("A", "z")`)<br>
3. If it's Unicode-aware, how should it act with, say, `String.range("A", "π")`?</p>
<br><div class="gmail_quote"><div dir="ltr">On Thu, Nov 3, 2016, 16:21 Viktor Kronvall <<a href="javascript:_e(%7B%7D,'cvml','viktor.kronvall@gmail.com');" target="_blank">viktor.kronvall@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Even more interestingly what would `String.range("","zzz")` produce. From what code point is the range started? Will this throw? Is the empty string included in the iterator?<br><div class="gmail_quote"><div dir="ltr">2016年11月3日(木) 21:18 Viktor Kronvall <<a href="javascript:_e(%7B%7D,'cvml','viktor.kronvall@gmail.com');" target="_blank">viktor.kronvall@gmail.com</a>>:<br></div></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Actually, after giving it some more thought for that case there is just that one possibility that makes sense.<br><br>However, there are more ambiguous cases such as `String.range("AAA", "ZZZ")` (should all letters increase at once or should the rightmost letter be incremented first)<br><br>Also, how would range handle the arguments in inverted order? Should there be a decreasing range or should it terminate with no elements in the iterator?<br><div class="gmail_quote"><div dir="ltr">2016年11月3日(木) 21:05 kdex <<a href="javascript:_e(%7B%7D,'cvml','kdex@kdex.de');" target="_blank">kdex@kdex.de</a>>:<br></div></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">About the code points: `String.range` should also handle surrogate pairs, similar to for..of does it.<br>
About `String.range("A", "zzz")`: Do any other possibilities even make sense?<br>
<br>
On Thursday, November 3, 2016 6:47:04 PM CET Viktor Kronvall wrote:<br>
> For `String.range` what would the expected result of<br>
> `String.range('A','zzz')` be?<br>
><br>
> Is an exhaustive pattern expected?<br>
><br>
> `['A','B','C',...'Z','a','b','<wbr>c',...,'z','AA','AB',...]`<br>
> 2016年11月3日(木) 19:21 Michael J. Ryan <<a href="javascript:_e(%7B%7D,'cvml','tracker1@gmail.com');" target="_blank">tracker1@gmail.com</a>>:<br>
><br>
> > If there's a Number.range, if suggest a corresponding String.range for<br>
> > character ranges...  Agreed on it being a utility function over me syntax.<br>
> ><br>
> > On Nov 3, 2016 10:25 AM, "Isiah Meadows" <<a href="javascript:_e(%7B%7D,'cvml','isiahmeadows@gmail.com');" target="_blank">isiahmeadows@gmail.com</a>> wrote:<br>
> ><br>
> > If string ranges are based on character codes, it will (for the Latin<br>
> > alphabet, at least, not necessarily for other languages).<br>
> ><br>
> > I would prefer a function over syntax, though, since it would be more<br>
> > easily adopted (polyfill > syntax), and it would fit more idiomatically<br>
> > with the rest of the language (which also uses functions for most<br>
> > utilities).<br>
> ><br>
> > Maybe a `Number.range` would work?<br>
> ><br>
> > ```js<br>
> > Number.range = function *range(start, end=undefined, step=1) {<br>
> >   if (end === undefined) [start, end] = [0, start];<br>
> >   if (end === undefined) end = Infinity;<br>
> >   for (let i = 0; i < end; i += step) {<br>
> >     yield i;<br>
> >   }<br>
> > };<br>
> > ```<br>
> ><br>
> > On Thu, Nov 3, 2016, 12:56 kdex <<a href="javascript:_e(%7B%7D,'cvml','kdex@kdex.de');" target="_blank">kdex@kdex.de</a>> wrote:<br>
> ><br>
> > Agreed. There's no reason why `Array.range` or `[1..10]` couldn't just<br>
> > return a generator<br>
> > or at least something that extends a generator, though. I wonder if it's<br>
> > viable to implement<br>
> > something akin to `.length` on ranges, which could be natural numbers or<br>
> > `Infinity`.<br>
> ><br>
> > As for numbers, I don't see any issues. One issue that came up in the<br>
> > original thread was<br>
> > that string ranges may need a better definition, as ["A".."C"] might not<br>
> > necessarily transpile<br>
> > to be a generator that yields "A", "B" and "C".<br>
> ><br>
> > On Thursday, November 3, 2016 4:46:03 PM CET Isiah Meadows wrote:<br>
> > > I'll note, just for clarity, that Scala's `1 to 10` is technically just a<br>
> > > normal method call equivalent to `(1).to(10)`, with optional parentheses<br>
> > > removed.<br>
> > ><br>
> > > Also, I'd prefer this to be a generator instead, so infinite ranges are<br>
> > > also possible, and so it doesn't have to be eager.<br>
> > ><br>
> > > On Thu, Nov 3, 2016, 11:52 Hikaru Nakashima <<a href="javascript:_e(%7B%7D,'cvml','oao.hikaru.oao@gmail.com');" target="_blank">oao.hikaru.oao@gmail.com</a>><br>
> > > wrote:<br>
> > ><br>
> > > > How about this<br>
> > > ><br>
> > > > ```<br>
> > > > for ( i of Array.range(1, 10) ) { ... }<br>
> > > > // OR<br>
> > > > for ( i of [1..10] )  { ... }<br>
> > > > ```<br>
> > > ><br>
> > > ><br>
> > > > ______________________________<wbr>_________________<br>
> > > > es-discuss mailing list<br>
> > > > <a href="javascript:_e(%7B%7D,'cvml','es-discuss@mozilla.org');" target="_blank">es-discuss@mozilla.org</a><br>
> > > > <a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/<wbr>listinfo/es-discuss</a><br>
> > > ><br>
> > ><br>
> > ______________________________<wbr>_________________<br>
> > es-discuss mailing list<br>
> > <a href="javascript:_e(%7B%7D,'cvml','es-discuss@mozilla.org');" target="_blank">es-discuss@mozilla.org</a><br>
> > <a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/<wbr>listinfo/es-discuss</a><br>
> ><br>
> ><br>
> > ______________________________<wbr>_________________<br>
> > es-discuss mailing list<br>
> > <a href="javascript:_e(%7B%7D,'cvml','es-discuss@mozilla.org');" target="_blank">es-discuss@mozilla.org</a><br>
> > <a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/<wbr>listinfo/es-discuss</a><br>
> ><br>
> > ______________________________<wbr>_________________<br>
> > es-discuss mailing list<br>
> > <a href="javascript:_e(%7B%7D,'cvml','es-discuss@mozilla.org');" target="_blank">es-discuss@mozilla.org</a><br>
> > <a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/<wbr>listinfo/es-discuss</a><br>
> ><br>
<br>
______________________________<wbr>_________________<br>
es-discuss mailing list<br>
<a href="javascript:_e(%7B%7D,'cvml','es-discuss@mozilla.org');" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/<wbr>listinfo/es-discuss</a><br>
</blockquote></div></blockquote></div>
______________________________<wbr>_________________<br>
es-discuss mailing list<br>
<a href="javascript:_e(%7B%7D,'cvml','es-discuss@mozilla.org');" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/<wbr>listinfo/es-discuss</a><br>
</blockquote></div>
</blockquote></div></div>