특정 상황에서 최소 및 최대 기능에 대해 혼란스러워합니다.
한 가지 맥락에서 함수를 사용하여 두 값 중 더 크거나 작은 값을 사용하면 문제가 없습니다. 예를 들어
//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);
}
쉬운. 그러나 다른 맥락에서, 나는 혼란스러워합니다. 최대 또는 최소를 설정하려고하면 뒤로 가져옵니다.
//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
}
다음과 같이 내 기능을 만드는 것이 바람직하지 않습니까?
//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)
}
분명히, 내장을 사용하는 것이 더 빠를 것이지만 이것은 나에게 불필요 한 미세 최적화처럼 보입니다. 이것이 바람직하지 않은 다른 이유가 있습니까? 그룹 프로젝트는 어떻습니까?
std::clamp
함수 또는 이와 유사한 것을 고려할 수 있습니다 .
up_to
(for min
)와 at_least
(for max
)일까요? 나는 그들이 minimize
왜 정답인지 깨닫는 데 약간의 시간이 걸릴 수 있지만, 그보다 더 나은 의미를 전달 한다고 생각합니다.
min
그리고 max
또한 minimize
및 maximize
당신이 쓰고 싶은 기능에 대한 완전히 잘못된 이름입니다. 기본값 min
이며 max
훨씬 더 의미가 있습니다. 실제로 ALMOST는 함수 이름을 올바르게 가지고 있습니다. 이 작업을 클램핑 또는 캡핑이라고하며 두 개의 캡핑 기능을 작성했습니다. 제안 capUpperBound
하고 싶습니다 capLowBound
. 어느 누구에게 어떤 일을하는지 설명 할 필요가 없습니다.