Existe um nome “canônico” para uma função que combina min () e max ()?
-
21-08-2019 - |
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.
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.
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.