मैं कुछ संदर्भों में न्यूनतम और अधिकतम कार्यों में भ्रमित हो जाता हूं।
एक संदर्भ में, जब आप दो मानों से अधिक या कम लेने के लिए फ़ंक्शन का उपयोग कर रहे हैं, तो कोई समस्या नहीं है। उदाहरण के लिए,
//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
(के लिए min
) और at_least
(के लिए max
)? मुझे लगता है कि वे अर्थ को बेहतर तरीके से व्यक्त करते हैं minimize
, आदि, हालांकि यह महसूस करने में एक पल लग सकता है कि वे क्यों कम्यूटेटिव हैं।
min
और max
भी minimize
और maximize
उन कार्यों के लिए पूरी तरह से गलत नाम हैं जिन्हें आप लिखना चाहते हैं। डिफ़ॉल्ट min
और max
बहुत अधिक समझ में आता है। आपको वास्तव में ALMOST को फ़ंक्शन नाम सही मिले। इस ऑपरेशन को क्लैम्पिंग या कैपिंग कहा जाता है और आपने दो कैपिंग फ़ंक्शन लिखे हैं। मेरा सुझाव था capUpperBound
और capLowBound
। मुझे किसी को समझाने की ज़रूरत नहीं है कि कौन क्या करता है, यह स्पष्ट है।