It's not a "standard library" unless every part of it has gone through a full standards process.
On Wed, Nov 28, 2018 at 8:31 PM Jacob Pratt <[email protected]> wrote: > 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. > > I'm absolutely in favor of having a `range` method, it's just _where_ it > should be that I differ. > > Jacob Pratt > > On Thu, Nov 29, 2018 at 4:29 AM Jack Works <[email protected]> wrote: > >> 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. >> Ps, does Pratt mean we should add it as a standard library in the stage 1 >> standard libraray proposal? >> >> On Thu, Nov 29, 2018, 12:18 Jacob Pratt <[email protected]> wrote: >> >>> Quick, simple TypeScript range function (with overloads, of course). >>> >>> ``` >>> export function range(end: number): IterableIterator<number>; >>> export function range(start: number, end: number): >>> IterableIterator<number>; >>> export function range(start: number, end: number, step: number): >>> IterableIterator<number>; >>> export function* range(start: number, end?: number, step?: number): >>> IterableIterator<number> { >>> // overload #1 >>> if (end === undefined) { >>> [start, end, step] = [0, start, 1]; >>> } >>> >>> // overload #2 >>> if (step === undefined) { >>> step = Math.sign(end - start); >>> } >>> >>> // ensure we have the appropriate types >>> if (typeof start !== 'number' || typeof end !== 'number' || typeof >>> step !== 'number') { >>> throw new TypeError('all parameters must be of type number'); >>> } >>> >>> while ((start < end && step > 0) || (start > end && step < 0)) { >>> yield start; >>> start += step; >>> } >>> } >>> ``` >>> >>> 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. >>> >>> Jacob Pratt >>> >>> On Wed, Nov 28, 2018 at 9:33 PM Tab Atkins Jr. <[email protected]> >>> wrote: >>> >>>> I end up writing a range function in virtually every project I use, so >>>> yeah, I think this is worthwhile. >>>> >>>> My own preferences, based on Python precedence: >>>> >>>> Number.range(end) === Number.range(0, end, 1) >>>> Number.range(start, end) === Number.range(start, end, >>>> Math.sign(end-start)) >>>> Number.range(start, end, step) => { >>>> if start < end && step > 0: yield all (start + k*step), for k from 0 >>>> to infinity, less than end >>>> elif start > end && step < 0: yield all (start + k*step), for k from >>>> 0 to infinity, greater than end >>>> else: yield nothing >>>> } >>>> >>>> So: >>>> * [...Number.range(5)] evaluates to [0, 1, 2, 3, 4] >>>> * [...Number.range(0)] evaluates to [] >>>> * [...Number.range(-5)] evaluates to [] >>>> * [...Number.range(1, -3)] evaluates to [1, 0, -1, -2] >>>> * [...Number.range(-3, 1)] evaluates to [-3, -2, -1, 0] >>>> * [...Number.range(1, 1)] evaluates to [] >>>> * [...Number.range(0, 10, 5)] evaluates to [0, 5] >>>> * [...Number.range(0, 10, -5)] evaluates to [] >>>> >>>> ~TJ >>>> >>> _______________________________________________ >>>> es-discuss mailing list >>>> [email protected] >>>> https://mail.mozilla.org/listinfo/es-discuss >>>> >>> _______________________________________________ > es-discuss mailing list > [email protected] > https://mail.mozilla.org/listinfo/es-discuss >
_______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

