Besides my concern that this is not in scope for Swift 4 phase 1, or for the standard library generally, the function as proposed is unsatisfactory because the behavior is incorrect when lower > upper.
Either (a) the parameters should be labeled (and for consistency with ranges, those labels should be "lowerBound" and "upperBound") and a precondition should exist before evaluation of the return value, or (b) this function should take two arguments, one of these being a Range, or (c) better still--this should be a method on numeric types or on Range. I'm not convinced that there is a use case for clamping values of any Comparable type. What does it mean to clamp a String, for example? Finally, it could possibly be more performant to compute the value using the comparison operators < and > directly instead of using the functions max and min. It would be nice to have benchmarks on that. But I am still not convinced that this function is important enough *and* susceptible enough to an incorrect implementation that the standard library should provide its own. On Fri, Sep 2, 2016 at 11:56 Nicholas Maccharoli via swift-evolution < [email protected]> wrote: > Introduction > > The aim of this proposal is to introduce clamp functionality to the swift > standard library. The clamp function would take a value and a upper and > lower bounds to clamp the value to, ensuring that the return value of the > function is within the range specified by the upper and lower bounds. > Swift-evolution thread: Discussion thread topic for that proposal > <https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160829/026748.html> > > <https://github.com/Nirma/swift-evolution/blob/clamp_proposal/proposals/NNNN-add-clamp-to-standard-library.md#motivation> > Motivation > > The standard library already includes functionality for min and max but > at the time of this writing there is no global function for clamp. Adding > a clamp function would complement min and max really well and would also > eliminate the need for developers to write their own clamp functionality. > > <https://github.com/Nirma/swift-evolution/blob/clamp_proposal/proposals/NNNN-add-clamp-to-standard-library.md#proposed-solution>Proposed > solution > > I propose that a global clamp function akin to min and max be added to > the standard library. > > <https://github.com/Nirma/swift-evolution/blob/clamp_proposal/proposals/NNNN-add-clamp-to-standard-library.md#detailed-design>Detailed > design > > The implementation of the global clamp function would be as follows: > > public func clamp<T : Comparable>(value: T, _ lower: T, _ upper: T) -> T { > return max(lower, min(value, upper)) > } > > > <https://github.com/Nirma/swift-evolution/blob/clamp_proposal/proposals/NNNN-add-clamp-to-standard-library.md#impact-on-existing-code>Impact > on existing code > > There are no impacts on existing code, this proposal is purely additive. > > <https://github.com/Nirma/swift-evolution/blob/clamp_proposal/proposals/NNNN-add-clamp-to-standard-library.md#alternatives-considered>Alternatives > considered > > Aside from not making the additions that this proposal wishes to make to > the standard library no other alternatives have been considered. > _______________________________________________ > 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
