ฉันสับสนกับฟังก์ชั่นขั้นต่ำและสูงสุดในบางบริบท
ในบริบทเดียวเมื่อคุณใช้ฟังก์ชั่นเพื่อรับค่าที่มากหรือน้อยกว่าสองค่าก็จะไม่มีปัญหา ตัวอย่างเช่น,
//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)
}
เห็นได้ชัดว่าการใช้บิวด์อินจะเร็วขึ้น แต่ดูเหมือนว่าฉันจะไม่จำเป็นต้องใช้ microoptimization มีเหตุผลอื่นใดหรือไม่ที่จะไม่เหมาะสมนี้? ในโครงการกลุ่มมีอะไรบ้าง
std::clamp
หรือสิ่งที่คล้ายกัน
up_to
(สำหรับmin
) และat_least
(สำหรับmax
)? ฉันคิดว่าพวกเขาถ่ายทอดความหมายได้ดีกว่าminimize
ฯลฯ แม้ว่าอาจใช้เวลาสักครู่ในการตระหนักว่าทำไมพวกเขาถึงสับเปลี่ยน
min
และmax
และminimize
และmaximize
เป็นชื่อที่ผิดโดยสิ้นเชิงสำหรับฟังก์ชั่นที่คุณต้องการเขียน ค่าเริ่มต้นmin
และmax
สมเหตุสมผลมากขึ้น คุณเกือบจะได้ชื่อฟังก์ชันถูกต้อง การดำเนินการนี้เรียกว่าการบีบอัดหรือการกำหนดสูงสุดและคุณได้เขียนสองฟังก์ชั่นการกำหนดสูงสุด ผมขอแนะนำและcapUpperBound
capLowBound
ฉันไม่ต้องอธิบายให้ใครฟัง