2009-02-05 251 views
23

我发现我经常最终编写一个我总是称之为“clamp()”的函数,这就是min()max()的组合。这个功能是否有标准的“规范”名称?结合min()和max()的函数是否存在“canonical”名称?

它总是看起来是这样的:

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

我会避免给你的参数使用与所用函数相同的名字,特别是因为它们不用于匹配对(即$ min用于max(),反之亦然)。相反,可能是$ lower和$ upper。 – 2009-02-05 16:39:17

+0

@BenBlank:好主意。编辑问题 – Kip 2012-10-18 18:39:04

+0

我使用名称InRange(),但我的评论不是关于名称,而是关于参数的排序。我发现它更容易阅读:InRange(min,value,max)比(value,min,max) – 2012-10-24 18:39:52

回答

35

是个好名字。

让我们把它作为标准。

0

我只是去一个函数名“rangeCheck”

+1

不好,rangeCheck听起来像是CHECKS。但它所做的是将值更改为一个范围。 – Thorsten79 2009-02-05 16:03:04

5

在一些语言中你有功能限制

NUM =限制(VAL,最小值,最大值)

3
clip(val, lo, hi) 
0

平均

因为它推广到更多的价值。

1

我们在这里使用pin。实际上,我们使用简单范围的pin和其他东西使用clamp

0

怎么样

bound(min, val, max) 

constrain

constrain(val, min, max) 
0

你怎么看的东西像InRangeClosestTo(数,RangeLowerBound,RangeUpperBound),或ClosestInRange(数,LowerBoundOfRange,UpperBoundOfRange)?他们的意思是'给我最接近数字的范围的元素',因为我希望是显而易见的。

的概念比呀具有两面性,但没有更多的,或限制或约束,且可能不希望如果号码不在范围之内返回任何一个钳更精确,

他们给我我看到的其余部分更清晰;尽管理解它们可能需要几秒钟的时间,但您只需要对名称进行推理,最多只需简单查看一下确认的评论;当你看到它有多精确时它是很好的(它是精确的,对吗?)。

你可能只会怀疑范围是否包容,但我认为大多数人会正确地认为它是包容性的。或者,您可以使用InInclRangeClosestTo和InExclRangeClosestTo,尽管我没有看到专用范围的很多用途。

当然,如果你想使用它们,你应该有一个自动完成的IDE。