Существует ли «каноническое» имя для функции, объединяющей min() и max()?

StackOverflow https://stackoverflow.com/questions/516500

Вопрос

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

Это было полезно?

Решение

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

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

Другие советы

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

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

clip(val, lo, hi)

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

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

медиана

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

Как насчет граница?

bound(min, val, max)

Или сдерживать?

constrain(val, min, max)

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

Эта концепция более точна, чем Clamp, который, да, имеет две стороны, но не более того, или Limit или Bound, которые могут не захотеть ничего возвращать, если число выходит за пределы диапазона,

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top