Tôi bị lẫn lộn giữa các hàm min và max, trong các ngữ cảnh nhất định.
Trong một ngữ cảnh, khi bạn đang sử dụng các hàm để lấy giá trị lớn hơn hoặc nhỏ hơn của hai giá trị, không có vấn đề gì. Ví dụ,
//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);
}
Dễ dàng. Nhưng trong một bối cảnh khác, tôi bị lẫn lộn. Nếu tôi đang cố gắng đặt tối đa hoặc tối thiểu, tôi sẽ nhận được ngược lại.
//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
}
Có phải là không thể thực hiện các chức năng của riêng tôi như sau?
//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)
}
Rõ ràng, sử dụng các nội trang sẽ nhanh hơn nhưng điều này có vẻ như là một sự tối ưu hóa vi mô không cần thiết đối với tôi. Có bất kỳ lý do khác điều này sẽ là không thể? Thế còn trong một dự án nhóm?
std::clamp
hoặc một cái gì đó tương tự.
up_to
(cho min
) và at_least
(cho max
)? Tôi nghĩ rằng chúng truyền đạt ý nghĩa tốt hơn minimize
, v.v. mặc dù có thể mất một lúc suy nghĩ để nhận ra lý do tại sao chúng giao hoán.
min
và max
cũng minimize
và maximize
là tên hoàn toàn sai cho các chức năng bạn muốn viết. Mặc định min
và max
có ý nghĩa hơn nhiều. Bạn thực sự đã có tên hàm đúng. Thao tác này được gọi là kẹp hoặc đóng nắp và bạn đã viết hai hàm giới hạn. Tôi muốn đề nghị capUpperBound
và capLowBound
. Tôi không phải giải thích cho bất cứ ai làm điều đó, điều đó là hiển nhiên.