You definitely ought to add “do nothing” to the alternative considered section. Also, any reason you didn’t implement `clamped` in terms of `min` and `max`?
> On Mar 12, 2017, at 10:16 AM, Nicholas Maccharoli via swift-evolution > <[email protected]> wrote: > > Swift-Evolution. > > This is a draft of a proposal adding `clamped(to:)` as an extension on > `Comparable`. > For now I have only included a version of the `clamped(to:)` function that > accepts `ClosedRange` but if the community decided that it is feasible to add > a version that takes half open ranges I would also love to include that as > well in this proposal. > > That you so much for the feedback so far and I am looking forward > to the community's feedback on this draft. > > - Nick > > > Add clamped(to:) to the stdlib > > Proposal: SE-NNNN > <https://github.com/Nirma/swift-evolution/blob/clamp_function/proposals/NNNN-filename.md> > Authors: Nicholas Maccharoli <https://github.com/Nirma> > Review Manager: TBD > Status: Awaiting review > During the review process, add the following fields as needed: > > Decision Notes: Rationale > <https://lists.swift.org/pipermail/swift-evolution/>, Additional Commentary > <https://lists.swift.org/pipermail/swift-evolution/> > Bugs: SR-NNNN <https://bugs.swift.org/browse/SR-NNNN>, SR-MMMM > <https://bugs.swift.org/browse/SR-MMMM> > Previous Revision: 1 > <https://github.com/apple/swift-evolution/blob/...commit-ID.../proposals/NNNN-filename.md> > Previous Proposal: SE-XXXX > <https://github.com/Nirma/swift-evolution/blob/clamp_function/proposals/XXXX-filename.md> > > <https://github.com/Nirma/swift-evolution/blob/clamp_function/proposals/NNNN-add-clamp-function.md#introduction>Introduction > > This proposal aims to add functionality to the standard library for clamping > a value to a ClosedRange. The proposed function would allow the user to > specify a range to clamp a value to where if the value fell within the range, > the value would be returned as is, if the value being clamped exceeded the > upper or lower bound in value the value of the boundary the value exceeded > would be returned. > > Swift-evolution thread: Add a clamp function to Algorithm.swift > <https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20170306/thread.html#33674> > > <https://github.com/Nirma/swift-evolution/blob/clamp_function/proposals/NNNN-add-clamp-function.md#motivation>Motivation > > There have been quite a few times in my professional and personal programming > life where I reached for a clampedfunction and was disappointed it was not > part of the standard library. > > Having functionality like clamped(to:) added to Comparable as a protocol > extension would benefit users of the Swift language who wish to guarantee > that a value is kept within bounds. > > > <https://github.com/Nirma/swift-evolution/blob/clamp_function/proposals/NNNN-add-clamp-function.md#proposed-solution>Proposed > solution > > The solution proposed is simply that there be a clamped(to:) function added > to the Swift Standard Library. The function would behave much like its name > describes. > > Given a clamped(to:) function existed it could be called in the following > way, yielding the results in the adjacent comments: > > var foo = 100 > foo.clamp(to: 0...50) // 50 > foo.clamp(to: 200...300) // 200 > foo.clamp(to: 0...150) // 100 > > <https://github.com/Nirma/swift-evolution/blob/clamp_function/proposals/NNNN-add-clamp-function.md#detailed-design>Detailed > design > > The implementation for clamped(to:) as an extension to Comparable accepting a > range of type ClosedRange<Self>would look like the following: > > extension Comparable { > func clamped(to range: ClosedRange<Self>) -> Self { > if self > range.upperBound { > return range.upperBound > } else if self < range.lowerBound { > return range.lowerBound > } else { > return self > } > } > } > > <https://github.com/Nirma/swift-evolution/blob/clamp_function/proposals/NNNN-add-clamp-function.md#source-compatibility>Source > compatibility > > This feature is purely additive; it has no effect on source compatibility. > > > <https://github.com/Nirma/swift-evolution/blob/clamp_function/proposals/NNNN-add-clamp-function.md#effect-on-abi-stability>Effect > on ABI stability > > This feature is purely additive; it has no effect on ABI stability. > > > <https://github.com/Nirma/swift-evolution/blob/clamp_function/proposals/NNNN-add-clamp-function.md#effect-on-api-resilience>Effect > on API resilience > > The proposed function would become part of the API but purely additive. > > > <https://github.com/Nirma/swift-evolution/blob/clamp_function/proposals/NNNN-add-clamp-function.md#alternatives-considered>Alternatives > considered > > clamped(to:) could be made a global function like min and max but a protocol > extension seems like a better choice. > _______________________________________________ > swift-evolution mailing list > [email protected] > https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
