আমি সাধারণত বেশিরভাগ কোড বিশ্লেষণ সতর্কতাগুলির সাথে একমত হই এবং আমি সেগুলি মেনে চলার চেষ্টা করি। তবে, এইটির সাথে আমার আরও কঠিন সময় কাটাচ্ছে:
CA1031: সাধারণ ব্যতিক্রম ধরণগুলি ধরবেন না
আমি এই নিয়মের যুক্তিটি বুঝতে পারি। তবে, বাস্তবে, যদি আমি নিক্ষিপ্ত ব্যতিক্রম নির্বিশেষে একই পদক্ষেপ নিতে চাই, তবে আমি কেন প্রত্যেককে বিশেষভাবে পরিচালনা করব? তদুপরি, যদি আমি নির্দিষ্ট ব্যতিক্রমগুলি পরিচালনা করি তবে কী কোডটি আমি কল করছি যা ভবিষ্যতে নতুন ব্যতিক্রম ছড়িয়ে দেওয়ার জন্য কল করছি? নতুন ব্যতিক্রমটি পরিচালনা করতে এখন আমার কোডটি পরিবর্তন করতে হবে। আমি যদি সহজেই ধরা পড়ে তবে Exception
আমার কোড পরিবর্তন করতে হবে না।
উদাহরণস্বরূপ, যদি ফু বার বার কল করে এবং ফু দ্বারা বার দ্বারা নিক্ষেপ করা ব্যতিক্রমের প্রকারটি নির্বিশেষে প্রক্রিয়াজাতকরণ বন্ধ করা দরকার, তবে আমি যে ধরণের ব্যতিক্রম ধরছি সে সম্পর্কে সুনির্দিষ্ট হওয়ার কোনও সুবিধা আছে কি?
এর থেকে আরও ভাল উদাহরণ হতে পারে:
public void Foo()
{
// Some logic here.
LogUtility.Log("some message");
}
public static void Log()
{
try
{
// Actual logging here.
}
catch (Exception ex)
{
// Eat it. Logging failures shouldn't stop us from processing.
}
}
আপনি যদি এখানে সাধারণ ব্যতিক্রম না ধরেন তবে আপনাকে সম্ভাব্য প্রতিটি ধরণের ব্যতিক্রম ধরতে হবে। প্যাট্রিকের একটি ভাল পয়েন্ট রয়েছে যা OutOfMemoryException
এইভাবে মোকাবেলা করা উচিত নয়। তাহলে আমি যদি প্রতিটি ব্যতিক্রম উপেক্ষা করতে চাই তবে OutOfMemoryException
?
OutOfMemoryError
, যা Exception
উত্তরাধিকার গাছ থেকে সেই কারণেই পৃথক
OutOfMemoryException
? সব কিছুর মত একই হ্যান্ডলিং কোড?