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::clampfunció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.
miny maxy también minimizey maximizeson nombres totalmente incorrectos para las funciones que desea escribir. El valor predeterminado miny maxtiene 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 capUpperBoundy capLowBound. No tengo que explicarle a nadie cuál hace cuál, es obvio.