আমি নির্দিষ্ট প্রসঙ্গে ন্যূনতম এবং সর্বাধিক ক্রিয়াকলাপগুলিতে বিভ্রান্ত হয়ে পড়ি।
একটি প্রসঙ্গে আপনি যখন দুটি মানকে আরও বেশি বা তার চেয়ে কম নিতে ফাংশনগুলি ব্যবহার করছেন তখন কোনও সমস্যা নেই। উদাহরণ স্বরূপ,
//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
ইত্যাদি অর্থের চেয়ে ভাল বোঝায় যদিও তারা কেন পরিবর্তনশীল তা উপলব্ধি করতে মুহুর্তের চিন্তাভাবনা নিতে পারে may
min
এবং max
এছাড়াও minimize
এবং maximize
আপনি যে ফাংশনগুলি লিখতে চান তার সম্পূর্ণ ভুল নাম। ডিফল্ট min
এবং max
আরও অনেক কিছু বোঝার। আপনি আসলে প্রায় সঠিকভাবে ফাংশন নাম পেয়েছেন। এই অপারেশনটিকে ক্ল্যাম্পিং বা ক্যাপিং বলা হয় এবং আপনি দুটি ক্যাপিং ফাংশন লিখেছেন। আমি পরামর্শ দেব capUpperBound
এবং capLowBound
। আমাকে কারও কাছে ব্যাখ্যা করতে হবে না যে কোনটি কোনটি করে, এটি সুস্পষ্ট।