Pergunta

Eu acho que eu freqüentemente acaba escrevendo uma função que eu sempre chamo "clamp()", que é uma espécie de combinação de min() e max(). Existe um padrão, "canônica" nome para esta função?

É sempre parece algo como isto:

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

Ou simplesmente usando built-in funções min() e max():

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

Variações: Você também pode verificar os dados de entrada, onde lower > upper, e quer lançar uma exceção ou reverter as entradas. Ou você pode ignorar ordem das entradas e chamá-lo uma função mediana-de-três, mas isso pode ser confuso.

Foi útil?

Solução

braçadeira é um nome bom.

Vamos torná-lo o padrão.

Outras dicas

Em alguns idiomas que têm o limite de função

num = limite (val, min, max)

clip(val, lo, hi)

Nós usamos pin aqui. Na verdade, usamos pin para faixas simples e clamp para outras coisas.

Eu tinha acabado de ir para um nome de função "rangeCheck"

mediana

Porque se generaliza para mais valores.

E obrigado ?

bound(min, val, max)

Restringir ?

constrain(val, min, max)

O que você acha de coisas como InRangeClosestTo (Número, RangeLowerBound, RangeUpperBound), ou ClosestInRange (Número, LowerBoundOfRange, UpperBoundOfRange)? Eles média 'Get me o elemento da faixa mais próxima ao número', como espero é óbvio.

O conceito é mais preciso do que um grampo que sim tem dois lados, mas não muito mais, ou um limite ou encadernado que pode não querer retornar nada se o número não estiver dentro da faixa,

Para mim, eles são mais claros, em seguida, a I saw repouso; embora possa levar um par de segundos para entendê-los, você só precisa raciocinar sobre o nome, e, no máximo, ter uma breve olhada no comentário a confirmação; E é bom quando você vê o quão preciso é (é preciso, certo?).

Você só pode ter dúvidas sobre se o intervalo é inclusiva ou não, mas acho que a maioria das pessoas corretamente supor que é inclusiva. Alternativamente, você pode usar InInclRangeClosestTo e InExclRangeClosestTo, althought não vejo um monte de usos para as faixas exclusivas.

Claro que você deve ter uma IDE-completando auto se você quiser usá-los.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top