Me confundo sobre las funciones mínimas y máximas, en ciertos contextos.
En un contexto, cuando usa las funciones para tomar el mayor o menor de dos valores, no hay problema. Por ejemplo,
//how many autographed CD's can I give out?
int howManyAutographs(int CDs, int Cases, int Pens)
{
//if no pens, then I cannot sign any autographs
if (Pens == 0)
return 0;
//I cannot give away a CD without a case or a case without a CD
return min(CDs, Cases);
}
Fácil. Pero en otro contexto, me confundo. Si estoy tratando de establecer un máximo o un mínimo, lo obtengo al revés.
//return the sum, with a maximum of 255
int cappedSumWRONG(int x, int y)
{
return max(x + y, 255); //nope, this is wrong
}
//return the sum, with a maximum of 255
int cappedSumCORRECT(int x, int y)
{
return min(x + y, 255); //much better, but counter-intuitive to my mind
}
¿Es desaconsejable hacer mis propias funciones de la siguiente manera?
//return x, with a maximum of max
int maximize(int x, int max)
{
return min(x, max);
}
//return x, with a minimum of min
int minimize(int x, int min)
{
return max(x, min)
}
Obviamente, usar los builtins será más rápido, pero esto me parece una microoptimización innecesaria. ¿Hay alguna otra razón por la que esto sería desaconsejable? ¿Qué pasa en un proyecto grupal?
std::clamp
función o algo similar.
up_to
(para min
) y at_least
(para max
)? Creo que transmiten el significado mejor que minimize
, etc. aunque puede tomar un momento pensar en por qué son conmutativos.
min
y max
y también minimize
y maximize
son nombres totalmente incorrectos para las funciones que desea escribir. El valor predeterminado min
y max
tiene mucho más sentido. En realidad, casi tienes los nombres de las funciones correctas. Esta operación se llama sujeción o limitación y ha escrito dos funciones de limitación. Sugeriría capUpperBound
y capLowBound
. No tengo que explicarle a nadie cuál hace cuál, es obvio.