গুগল করা যেতে পারে এমন সমস্ত স্ট্যান্ডার্ড-উত্তরগুলি এড়াতে, আমি এমন একটি উদাহরণ দেব যা আপনি সকলেই ইচ্ছামত আক্রমণ করতে পারেন।
C # এবং জাভা (এবং খুব অনেকে) ধরনের 'ওভারফ্লো আচরণ কিছু আমি এ সব পছন্দ না প্রচুর সঙ্গে আছে (যেমন type.MaxValue + type.SmallestValue == type.MinValue
উদাহরণস্বরূপ: int.MaxValue + 1 == int.MinValue
)।
তবে, আমার জঘন্য প্রকৃতিটি দেখেছি, আমি এই আচরণটি প্রসারিত করে এই আঘাতটিতে কিছুটা অপমান যুক্ত করব, আসুন একটি ওভাররাইড DateTime
টাইপ বলি । (আমি জানি DateTime
। নেট এ সিল করা আছে, তবে এই উদাহরণের জন্য, আমি সিউডো ভাষা ব্যবহার করছি যা সি # এর মতো হ'ল, ডেটটাইম সিল না করা ব্যতীত)।
ওভাররাইড Add
পদ্ধতি:
/// <summary>
/// Increments this date with a timespan, but loops when
/// the maximum value for datetime is exceeded.
/// </summary>
/// <param name="ts">The timespan to (try to) add</param>
/// <returns>The Date, incremented with the given timespan.
/// If DateTime.MaxValue is exceeded, the sum wil 'overflow' and
/// continue from DateTime.MinValue.
/// </returns>
public DateTime override Add(TimeSpan ts)
{
try
{
return base.Add(ts);
}
catch (ArgumentOutOfRangeException nb)
{
// calculate how much the MaxValue is exceeded
// regular program flow
TimeSpan saldo = ts - (base.MaxValue - this);
return DateTime.MinValue.Add(saldo)
}
catch(Exception anyOther)
{
// 'real' exception handling.
}
}
অবশ্যই একটি যদি এটি কেবল সহজ সমাধান করতে পারে তবে সত্য যে এখনও আপনি ব্যতিক্রমগুলি কেন ব্যবহার করতে পারছেন না তা দেখার জন্য আমি ব্যর্থ হয়েছি (যুক্তিযুক্তভাবে, আমি দেখতে পাচ্ছি যে যখন পারফরম্যান্স এমন একটি সমস্যা হয় যে নির্দিষ্ট ক্ষেত্রে ব্যতিক্রমগুলি এড়ানো উচিত) )।
আমি মনে করি অনেক ক্ষেত্রে তারা যদি স্ট্রাকচারের চেয়ে আরও স্পষ্ট হয় এবং পদ্ধতিটি যে চুক্তি করছে তাতে কোনও চুক্তি ভঙ্গ করে না।
প্রত্যেককে মনে হয় “নিয়মিত প্রোগ্রাম প্রবাহের জন্য এগুলি কখনই ব্যবহার করবেন না” এমন প্রতিক্রিয়া প্রত্যেকের মনে হয় যে প্রতিক্রিয়াটির শক্তিটি ন্যায়সঙ্গত করতে পারে হিসাবে এটি এত সুন্দরভাবে অন্তর্নির্মিত নয়।
নাকি আমি ভুল করছি?
আমি অন্যান্য পোস্টগুলি পড়েছি, সমস্ত ধরণের বিশেষ ক্ষেত্রে মোকাবেলা করেছি, তবে আমার বক্তব্যটি হ'ল আপনি উভয়ই হ'ল এতে কোনও ভুল নেই:
- স্পষ্ট
- আপনার পদ্ধতির চুক্তিকে সম্মান করুন
আমাকে গুলি করো.
if
বিবৃতি। আপনি এটি খুব কঠিন খুঁজে পাবেন। অন্য কথায়: আপনার খুব ভিত্তি ত্রুটিযুক্ত এবং আপনি এটি থেকে যে সিদ্ধান্তে পৌঁছেছেন তা ভুল।