Domanda

Trovo che spesso finisco per scrivere una funzione che chiamo sempre "clamp()", cioè una specie di combinazione di min() e max(). Esiste uno standard, il nome "canonica" per questa funzione?

Sembra sempre qualcosa di simile:

function clamp($val, $lower, $upper)
{
  if ($val < $lower)
    return $lower;
  else if ($val > $upper)
    return $upper;
  else
    return $val;
}

O semplicemente utilizzando built-in lower > upper e <=> funzioni:

function clamp($val, $lower, $upper)
{
  return max($lower, min($upper, $val));
}

Variazioni esistono: Si può anche verificare la presenza di input non valido, dove <=>, e sia generano un'eccezione o invertire gli ingressi. Oppure si può ignorare ordine degli ingressi e chiamare una funzione mediana-di-tre, ma che può essere fonte di confusione.

È stato utile?

Soluzione

morsetto è un buon nome.

Facciamo lo standard.

Altri suggerimenti

In alcune lingue si ha la funzione di limite di

num = Limite (val, min, max)

clip(val, lo, hi)

Usiamo pin qui. A dire il vero, usiamo clamp per semplici gamme e <=> per altre cose.

Vorrei solo andare per un nome di funzione "rangeCheck"

mediano

Perché generalizza a più valori.

Che dire di legato

bound(min, val, max)

vincolo ?

constrain(val, min, max)

Cosa ne pensi di cose come InRangeClosestTo (Numero, RangeLowerBound, RangeUpperBound), o ClosestInRange (Numero, LowerBoundOfRange, UpperBoundOfRange)? Significano 'Prendimi l'elemento della gamma più vicino al numero', come spero sia evidente.

Il concetto è più preciso di un morsetto che sì ha due lati, ma non molto di più, o un limite o Bound che potrebbero non vogliono restituire nulla se il numero non è all'interno della gamma,

Per me sono più chiare poi il resto ho visto; anche se può prendere un paio di secondi per capire loro, è solo bisogno di ragionare sul nome, e al massimo un breve sguardo al commento per la conferma; ed è bello quando si vede come precisa è (è preciso, giusto?).

Si potrebbe avere solo dubbi sul fatto che l'intervallo è compreso o no, ma penso che la maggior parte delle persone sarebbe corretto supporre che sia inclusiva. In alternativa si potrebbe utilizzare InInclRangeClosestTo e InExclRangeClosestTo, ma decorate non vedo un sacco di usi per i campi in esclusiva.

Naturalmente si dovrebbe avere un IDE auto-completamento se si voleva usarli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top