পারফরম্যান্স হিট সম্ভবত সবচেয়ে নগন্য, এই উত্তর হিসাবে ব্যাখ্যা করা হয়েছে ।
সুতরাং আসুন ধারণাটি নিয়ে চলুন যে পারফরম্যান্স কোনও সমস্যা নয়। আপনি নিক্ষেপ করছি System.Exception, শুধু মধ্যে সঞ্চালনের সরাতে catchদফা । একটি নিক্ষেপ BadControlFlowThatShouldBeRewrittenExceptionসম্ভবত অত্যধিক কিল হবে।
আসুন এটি ভেঙে দিন। আমাদের আছে:
- পদ্ধতি
GetDataFromServer(পদ্ধতির নামগুলি সি # তে পাস্কেলকেস হওয়া উচিত), যা সম্ভবত একটি ব্যতিক্রম ছুঁড়ে ফেলতে পারে বা এটিকে ফেরত দিতে পারে bool।
- যদি ফলাফল হয়
true, চালান ProcessData।
nullঅন্যথায় ফিরে আসুন ।
এই কোডটি যে পদ্ধতিতে লিখিত হয়েছে তার মতো দেখে মনে হচ্ছে খুব সহজেই অনেক কিছু করা হচ্ছে। ডিজাইনের ত্রুটির মতো দেখতে GetDataFromServerফিরে আসার জন্য bool, আমি সেই পদ্ধতিটি সার্ভার থেকে প্রাপ্ত ডেটা ফিরিয়ে আনার প্রত্যাশা করছিলাম , এমন কয়েকটি IEnumerable<SomeType>যাতে 0 বা ততোধিক আইটেম থাকবে - যেমন খুশির পথে এন আইটেমগুলি ফিরে আসে যেখানে এন> 0 , তেমন খুশি নয় পাথ 0 টি আইটেম ফিরিয়ে দেয় এবং অসুখী পথটি অবিচ্ছিন্ন ব্যতিক্রমের সাথে প্রবাহিত হয়, যাই হোক না কেন।
পদ্ধতিটি দেখতে দেখতে বেশ কিছুটা বদলে যায় - এটি আবার বোঝা শক্ত যে এটির অর্থ বোঝে কি না, কারণ মূল পোস্টটিতে কেবল একটি প্রস্থান পয়েন্ট থাকে (এবং এইভাবে সমস্ত কোড পাথ কোনও মান ফেরায় না বলে সংকলন করে না ), তাই এটি কেবল একটি বন্য অনুমান:
try
{
var result = GetDataFromServer();
return ProcessData(result);
}
catch
{
return null;
}
এখানে আপনি ProcessDataএটি দেখতে এবং দেখতে পাচ্ছেন যে এটিটি পুনরাবৃত্তি করছে resultএবং nullএর মধ্যে কোনও আইটেম না থাকলে ফিরে আসে IEnumerable।
এখন কেন পদ্ধতি ফিরছে null? সার্ভার ডাউন ছিল? কোয়েরিতে কোনও বাগ আছে? সংযোগের স্ট্রিংটি ভুল শংসাপত্র ব্যবহার করছে? আপনি যখন GetDataFromServerপ্রত্যাশা করছেন না এমন ব্যতিক্রম যখনই ফুঁকছে তখন আপনি এটিকে গিলে ফেলছেন, কার্পেটের নীচে ঘেঁষছেন এবং একটি nullমান ফিরিয়ে দিচ্ছেন । আমি এই ক্ষেত্রে নির্দিষ্ট ব্যতিক্রম ধরা সুপারিশ করব, এবং সমস্ত কিছু লগ ইন; ডিবাগিং সেইভাবে অনেক সহজ হবে।
একটি সাধারণ catchধারা সহ যা ব্যতিক্রম ক্যাপচার করে না, কোনও কিছুর নির্ণয় করা বেশ শক্ত হয়ে যায়। আমি পরিবর্তে নূন্যতম এটি করতে চাই:
catch(Exception e)
{
return null;
}
eযদি আপনি কিছু ভুল হয়ে যায় তবে আপনি এখন অন্তত বিরতি এবং পরীক্ষা করতে পারেন।
টিএল; ডিআর : না, প্রবাহ নিয়ন্ত্রণের জন্য ব্যতিক্রম ছোঁড়া এবং ধরা ভাল ধারণা নয়।