我发现我经常最终编写一个我称之为“clamp()
”的函数,这是min()
和max()
的组合。该功能是否有标准的“规范”名称?
它总是看起来像这样:
function clamp($val, $lower, $upper)
{
if ($val < $lower)
return $lower;
else if ($val > $upper)
return $upper;
else
return $val;
}
或者只是使用内置的min()
和max()
函数:
function clamp($val, $lower, $upper)
{
return max($lower, min($upper, $val));
}
存在变化:您还可以检查无效输入,lower > upper
,并抛出异常或反转输入。或者您可以忽略输入的顺序并将其称为三次中值函数,但这可能会令人困惑。
答案 0 :(得分:37)
clamp 是一个好名字。
让我们把它作为标准。
答案 1 :(得分:5)
在某些语言中,您有功能限制
num = limit(val,min,max)
答案 2 :(得分:3)
clip(val, lo, hi)
答案 3 :(得分:1)
我们在这里使用pin
。实际上,我们将pin
用于简单范围,将clamp
用于其他内容。
答案 4 :(得分:0)
我只想找一个功能名称“rangeCheck”
答案 5 :(得分:0)
中值
因为它推广到更多的价值观。
答案 6 :(得分:0)
答案 7 :(得分:0)
您如何看待 InRangeClosestTo (Number,RangeLowerBound,RangeUpperBound)或 ClosestInRange (Number,LowerBoundOfRange,UpperBoundOfRange)?他们的意思是“让我得到最接近数字的范围的元素”,我希望这很明显。
这个概念比Clamp更精确,是因为它有两个但不是更多,或者如果数字不在范围内,可能不想返回任何东西的限制或界限,
对我来说,他们比我看到的其他人更清楚;虽然理解它们可能需要几秒钟,但您只需要对该名称进行推理,并且最多只需简要查看注释即可确认;当你看到它有多精确时(它是精确的,对吧?)它很好。
你可能只怀疑范围是否具有包容性,但我认为大多数人会正确地认为它是包容性的。或者你可以使用InInclRangeClosestTo和InExclRangeClosestTo,虽然我没有看到很多用于独占范围。
当然,如果你想使用它们,你应该有一个自动完成的IDE。