[swift-evolution] [Proposal draft] Add `Clamp` function to standard library

Nicholas Maccharoli nmaccharoli at gmail.com
Fri Sep 2 11:55:46 CDT 2016


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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160903/5a478a8b/attachment.html>


More information about the swift-evolution mailing list