<div dir="ltr">Hello everyone, I made a formal proposal <a href="https://github.com/Jack-Works/proposal-Number.range">https://github.com/Jack-Works/proposal-Number.range</a> , welcome to disscuss the details in the repo!</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Nov 29, 2018 at 3:01 PM Jordan Harband <<a href="mailto:ljharb@gmail.com">ljharb@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">It's not a "standard library" unless every part of it has gone through a full standards process.</div><br><div class="gmail_quote"><div dir="ltr">On Wed, Nov 28, 2018 at 8:31 PM Jacob Pratt <<a href="mailto:jhprattdev@gmail.com" target="_blank">jhprattdev@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>I'm not saying we should add it on to that proposal, but rather saying that I think more effort should be put into a standard library where things like this don't need to go through a full standards process. That's just my opinion, and borderline on-topic for this specific suggestion.</div><div><br></div><div>I'm absolutely in favor of having a `range` method, it's just _where_ it should be that I differ.<br></div><div><br clear="all"></div>Jacob Pratt<br></div><br><div class="gmail_quote"><div dir="ltr">On Thu, Nov 29, 2018 at 4:29 AM Jack Works <<a href="mailto:zjwpeter@gmail.com" target="_blank">zjwpeter@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Oh, I'm not here to find out how to implement a range in detail. That's the trivial things, I want to first make it become a stage 0 proposal, then we can discuss if we need some overload or how to deal with the edge cases.<div>Ps, does Pratt mean we should add it as a standard library in the stage 1 standard libraray proposal? <br><div dir="auto"><br><div class="gmail_quote"><div dir="ltr">On Thu, Nov 29, 2018, 12:18 Jacob Pratt <<a href="mailto:jhprattdev@gmail.com" target="_blank">jhprattdev@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Quick, simple TypeScript range function (with overloads, of course).</div><div><br></div><div>```<br>export function range(end: number): IterableIterator<number>;<br>export function range(start: number, end: number): IterableIterator<number>;<br>export function range(start: number, end: number, step: number): IterableIterator<number>;<br>export function* range(start: number, end?: number, step?: number): IterableIterator<number> {<br>  // overload #1<br>  if (end === undefined) {<br>    [start, end, step] = [0, start, 1];<br>  }<br><br>  // overload #2<br>  if (step === undefined) {<br>    step = Math.sign(end - start);<br>  }<br><br>  // ensure we have the appropriate types<br>  if (typeof start !== 'number' || typeof end !== 'number' || typeof step !== 'number') {<br>    throw new TypeError('all parameters must be of type number');<br>  }<br><br>  while ((start < end && step > 0) || (start > end && step < 0)) {<br>    yield start;<br>    start += step;<br>  }<br>}<br></div><div>```</div><div><br></div><div>IMO, we should focus on building up a JavaScript standard library that has tons of useful utilities like this, rather than continue to add methods onto namespaces. Perhaps that's just me, though.<br></div><div><div><br></div><div>Jacob Pratt<br></div></div></div><br><div class="gmail_quote"></div><div class="gmail_quote"><div dir="ltr">On Wed, Nov 28, 2018 at 9:33 PM Tab Atkins Jr. <<a href="mailto:jackalmage@gmail.com" target="_blank">jackalmage@gmail.com</a>> wrote:<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"></blockquote></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I end up writing a range function in virtually every project I use, so<br>
yeah, I think this is worthwhile.<br>
<br>
My own preferences, based on Python precedence:<br>
<br>
Number.range(end) === Number.range(0, end, 1)<br>
Number.range(start, end) === Number.range(start, end, Math.sign(end-start))<br>
Number.range(start, end, step) => {<br>
  if start < end && step > 0: yield all (start + k*step), for k from 0<br>
to infinity, less than end<br>
  elif start > end && step < 0: yield all (start + k*step), for k from<br>
0 to infinity, greater than end<br>
  else: yield nothing<br>
}<br>
<br>
So:<br>
* [...Number.range(5)] evaluates to [0, 1, 2, 3, 4]<br>
* [...Number.range(0)] evaluates to []<br>
* [...Number.range(-5)] evaluates to []<br>
* [...Number.range(1, -3)] evaluates to [1, 0, -1, -2]<br>
* [...Number.range(-3, 1)] evaluates to [-3, -2, -1, 0]<br>
* [...Number.range(1, 1)] evaluates to []<br>
* [...Number.range(0, 10, 5)] evaluates to [0, 5]<br>
* [...Number.range(0, 10, -5)] evaluates to []<br>
<br>
~TJ<br></blockquote></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
_______________________________________________<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" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</blockquote></div>
</blockquote></div></div></div>
</blockquote></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" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</blockquote></div>
</blockquote></div>