Есть ли «каноническое» имя для функции, объединяющей min () и max ()? - PullRequest
23 голосов
/ 05 февраля 2009

Я часто заканчиваю тем, что пишу функцию, которую я всегда называю "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, и либо сгенерировать исключение, либо отменить ввод. Или вы можете игнорировать порядок ввода и называть его функцией медианы-трех, но это может сбивать с толку.

Ответы [ 8 ]

37 голосов
/ 05 февраля 2009

зажим - это доброе имя.

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

5 голосов
/ 05 февраля 2009

В некоторых языках у вас есть ограничение функции

число = предел (val, min, max)

3 голосов
/ 05 февраля 2009
clip(val, lo, hi)
1 голос
/ 05 февраля 2009

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

0 голосов
/ 18 апреля 2014

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

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

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

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

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

0 голосов
/ 17 октября 2012

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

bound(min, val, max)

Или ограничение ?

constrain(val, min, max)
0 голосов
/ 05 февраля 2009

средний

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

0 голосов
/ 05 февраля 2009

Я бы просто выбрал имя функции "rangeCheck"

...