Ответ 1
clamp - хорошее имя.
Сделаем это стандартом.
Я нахожу, что часто получаю функцию, которую я всегда называю "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
, и либо выбросить исключение, либо отменить входы. Или вы можете игнорировать порядок входов и называть его медианой из трех функций, но это может ввести в заблуждение.
clamp - хорошее имя.
Сделаем это стандартом.
В некоторых языках у вас есть предел функции
num = limit (val, min, max)
clip(val, lo, hi)
Здесь мы используем pin
. На самом деле мы используем pin
для простых диапазонов и clamp
для других вещей.
Я бы просто запустил имя функции "rangeCheck"
средний
Потому что он обобщает на большее количество значений.
Как насчет bound?
bound(min, val, max)
Или ограничить?
constrain(val, min, max)
Что вы думаете о таких вещах, как InRangeClosestTo (Number, RangeLowerBound, RangeUpperBound) или ClosestInRange (Number, LowerBoundOfRange, UpperBoundOfRange)? Они означают "Получите мне элемент диапазона, ближайшего к числу", как я надеюсь, очевидно.
Концепция более точная, чем Clamp, которая имеет две стороны, но не намного больше, или Limit или Bound, которые, возможно, не захотят возвращать что-либо, если число не находится в пределах диапазона,
Для меня они более ясны, чем остальные, которые я видел; хотя для их понимания может потребоваться несколько секунд, вам нужно всего лишь рассуждать о названии, и в лучшем случае краткий взгляд на комментарий для подтверждения; и это приятно, когда вы видите, насколько это точно (точно, правильно?).
У вас могут быть сомнения только в том, является ли диапазон включенным или нет, но я думаю, что большинство людей правильно включило бы его включительно. В качестве альтернативы вы можете использовать InInclRangeClosestTo и InExclRangeClosestTo, хотя я не вижу большого количества применений для эксклюзивных диапазонов.
Конечно, у вас должна быть автоматическая настройка IDE, если вы хотите их использовать.