2009-02-05 5 views
23

Я нахожу, что часто получаю функцию, которую я всегда называю «clamp()», это своего рода сочетание min() и max(). Существует ли стандартное «каноническое» имя для этой функции?Существует ли «каноническое» имя для функции, объединяющей 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

Я бы не дал вашим параметрам те же имена, что и используемые функции, особенно если они не используются в совпадающих парах (т. Е. Используется $ min с max() и наоборот). Возможно, вместо этого $ lower и $ upper. –

+0

@BenBlank: хорошая идея. отредактировал вопрос – Kip

+0

Я использую имя InRange(), но мой комментарий касается не имени, а порядка упорядочения параметров. Мне легче читать: InRange (мин, значение, макс.), Чем (значение, мин., Макс.) –

ответ

35

зажим хорошее имя.

Давайте сделаем это стандартом.

+2

Кажется стандартным (по крайней мере, в графике) уже: http://en.wikipedia.org/wiki/Clamping_%28graphics%29 –

+0

Хм .. возможно, я выбрал «зажим» в какой-то момент и забыл, где я его получил от .. – Kip

+0

Вид прекрасного имени после того, как я понял, что это было. Плюс один к стандарту. – Rodrigo

0

Я бы просто пойти на имя функции «rangeCheck»

+1

не очень хорошо, rangeCheck звучит как CHECKS. Но то, что он делает, это ИЗМЕНЕНИЕ значений в диапазоне. – Thorsten79

5

В некоторых языках у вас есть предельная функция

Num = предел (значение, мин, макс)

0

медиана

Поскольку обобщается на более значений.

+1

Речь идет не о поиске статистической информации о наборе образцов. Это означает, что число будет в определенном диапазоне. – MSN

+2

@MSN: технически медиана (val, min, max) будет делать то же самое, что и зажим (val, min, max). плюс, порядок параметров к медианному() не имеет значения. но это не сразу очевидно (по крайней мере, это было не для меня). – Kip

+0

Медиана имеет то преимущество, что сама описательна. Вы возвращаете медианный элемент. Например, будет ли «зажимать» исключение, если мой min меньше моего max? В этом случае аргументом является min? Первый или второй? Эти детали могут измениться с места на место. –

1

Здесь мы используем pin. Фактически, мы используем pin для простых диапазонов и clamp для других вещей.

0

А как насчет связанных?

bound(min, val, max) 

или constrain?

constrain(val, min, max) 
0

Что вы думаете о вещах, как InRangeClosestTo (номер, RangeLowerBound, RangeUpperBound) или ClosestInRange (номер, LowerBoundOfRange, UpperBoundOfRange)? Они означают «Получите мне элемент диапазона, ближайшего к числу», как я надеюсь, очевидно.

Концепция является более точным, чем зажим, что да имеет две стороны, но не намного больше, или лимит или Bound, которые, возможно, не хотят ничего возвращать, если число не находится в пределах диапазона,

Для меня они яснее, чем остальные, которые я видел; хотя для их понимания может потребоваться несколько секунд, вам нужно всего лишь рассуждать о названии, и в лучшем случае краткий взгляд на комментарий для подтверждения; и хорошо, когда вы видите, насколько это точно (это точно, верно?).

У вас могут быть сомнения только в том, включен ли диапазон, или нет, но я думаю, что большинство людей правильно предполагают, что оно включено. В качестве альтернативы вы можете использовать InInclRangeClosestTo и InExclRangeClosestTo, хотя я не вижу большого количества применений для эксклюзивных диапазонов.

Конечно, у вас должна быть автоматическая комплектация IDE, если вы хотите их использовать.

 Смежные вопросы

  • Нет связанных вопросов^_^