language agnostic - ¿Hay un nombre "canónico" para una función que combine min() y max()?
language-agnostic standards (8)
En algunos idiomas, tiene el límite de funciones
num = limit (val, min, max)
Encuentro que con frecuencia termino escribiendo una función que siempre llamo " clamp()
", que es una especie de combinación de min()
y max()
. ¿Hay un nombre "canónico" estándar para esta función?
Siempre se ve algo como esto:
function clamp($val, $lower, $upper)
{
if ($val < $lower)
return $lower;
else if ($val > $upper)
return $upper;
else
return $val;
}
O simplemente usando las funciones integradas min()
y max()
:
function clamp($val, $lower, $upper)
{
return max($lower, min($upper, $val));
}
Existen variaciones: también puede verificar la entrada no válida, donde lower > upper
, y arrojar una excepción o invertir las entradas. O puede ignorar el orden de las entradas y llamarlo una función de la mediana de tres, pero eso puede ser confuso.
Solo buscaría un nombre de función "rangeCheck"
Usamos pin
aquí. En realidad, utilizamos pin
para rangos simples y clamp
para otras cosas.
mediana
Porque se generaliza a más valores.
abrazadera es un buen nombre.
Hagamos de él el estándar.
clip(val, lo, hi)
¿Qué piensas de cosas como InRangeClosestTo (Number, RangeLowerBound, RangeUpperBound) o ClosestInRange (Number, LowerBoundOfRange, UpperBoundOfRange)? Quieren decir ''Obtener el elemento del rango más cercano al número'', como espero que sea obvio.
El concepto es más preciso que una abrazadera que sí tiene dos lados pero no mucho más, o un límite o un límite que podría no querer devolver nada si el número no está dentro del rango,
Para mí son más claros que el resto que vi; aunque puede tomar un par de segundos entenderlos, solo necesita razonar sobre el nombre y, a lo sumo, echar un breve vistazo al comentario para confirmarlo; y es agradable cuando se ve qué tan preciso es (es preciso, ¿verdad?).
Puede que solo tenga dudas sobre si el rango es inclusivo o no, pero creo que la mayoría de las personas asumirían correctamente que es inclusivo. Alternativamente, puede utilizar InInclRangeClosestTo e InExclRangeClosestTo, aunque no veo muchos usos para rangos exclusivos.
Por supuesto, debe tener un IDE autocompletado si desea usarlos.