Saya bingung tentang fungsi min dan maks, dalam konteks tertentu.
Dalam satu konteks, saat Anda menggunakan fungsi untuk mengambil dua nilai yang lebih besar atau lebih kecil, tidak ada masalah. Sebagai contoh,
//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);
}
Mudah. Tetapi dalam konteks lain, saya bingung. Jika saya mencoba menetapkan maksimum atau minimum, saya mendapatkannya mundur.
//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
}
Apakah tidak disarankan untuk membuat fungsi saya sendiri sebagai berikut?
//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)
}
Jelas, menggunakan builtin akan lebih cepat tetapi ini sepertinya mikro optimasi yang tidak perlu bagi saya. Apakah ada alasan lain mengapa hal ini tidak disarankan? Bagaimana dengan proyek kelompok?
std::clamp
fungsi atau sesuatu yang serupa.
up_to
(untuk min
) dan at_least
(untuk max
)? Saya pikir mereka menyampaikan maknanya lebih baik daripada minimize
, dll. Meskipun mungkin perlu beberapa saat untuk menyadari mengapa mereka berubah-ubah.
min
dan max
dan juga minimize
dan maximize
sama sekali nama yang salah untuk fungsi yang ingin Anda tulis. Default min
dan max
lebih masuk akal. Anda sebenarnya HAMPIR memiliki nama fungsi yang tepat. Operasi ini disebut penjepitan atau pembatasan dan Anda telah menulis dua fungsi pembatasan. Saya sarankan capUpperBound
dan capLowBound
. Saya tidak perlu menjelaskan kepada siapa pun yang melakukan itu, sudah jelas.