Clamp

Clamp for min/max values

In my article on value objects, the example involved constraining an integer to a minimum and maximum value in the #initialize method. As of Ruby 2.4, there’s a handy method for that: #clamp. The documentation for the method is in the Comparable module.

Instead of…

…using Array#min and Array#max to constrain a value within a range:

value = 1000
[[0, value].max], 255].min
#=> 255

value = -100
[[0, value].max], 255].min
#=> 0

Use…

…Ruby’s #clamp method.

value = 1000
value.clamp(0, 255)
#=> 255

value = -100
value.clamp(0, 255)
#=> 0

Why?

The standard library is deliberately expansive and elegant.

This is the exact use case for the problem I was trying to solve, so why use more verbose syntax?

Why not?

There’s no reason not to. Maybe you like the look of confusing square brackets?

Thanks

My appreciation to Justin for pointing out my pre-2.4 Ruby.


originally posted on 11 Aug 2019 by @andycroll

photo by
Matt Artz

Don’t miss my next post, sign up to the One Ruby Thing email and get my next post in your inbox.

Don’t miss my next post, sign up to the One Ruby Thing email and get my next post in your inbox.