আমি প্রায় ইতিবাচক যে উত্তর হ্যাঁ। যদি আমি চেষ্টা করি অবশেষে ব্লক ব্যবহার করি তবে ক্যাচ ব্লকটি ব্যবহার না করে তবে কোনও ব্যতিক্রম বুদবুদ হবে। সঠিক?
সাধারণভাবে অনুশীলন সম্পর্কে কোন চিন্তা?
শেঠ
আমি প্রায় ইতিবাচক যে উত্তর হ্যাঁ। যদি আমি চেষ্টা করি অবশেষে ব্লক ব্যবহার করি তবে ক্যাচ ব্লকটি ব্যবহার না করে তবে কোনও ব্যতিক্রম বুদবুদ হবে। সঠিক?
সাধারণভাবে অনুশীলন সম্পর্কে কোন চিন্তা?
শেঠ
উত্তর:
হ্যাঁ, এটা একেবারে হবে। আপনার finally
ব্লক ধরে নেওয়া অবশ্যই একটি ব্যতিক্রম ছুঁড়ে না, অবশ্যই, সেই ক্ষেত্রে যা মূলত নিক্ষিপ্ত হয়েছিল সেইটিকে কার্যকরভাবে "প্রতিস্থাপন" করবে।
সাধারণভাবে অনুশীলন সম্পর্কে কোন চিন্তা?
হ্যাঁ. সতর্কতা অবলম্বন করা আবশ্যক । যখন আপনার অবশেষে অবরুদ্ধ চলছে, এটি সম্পূর্ণরূপে সম্ভব যে এটি চলছে because কারণ একটি নিয়ন্ত্রণহীন, অপ্রত্যাশিত ব্যতিক্রম ছুঁড়ে দেওয়া হয়েছে । মানে যে কিছু যে ভাঙ্গা এবং কিছু সম্পূর্ণরূপে অপ্রত্যাশিত ঘটছে যেতে পারে।
এই পরিস্থিতিতে এটি যুক্তিযুক্ত যে ক্ষেত্রে আপনার শেষ পর্যন্ত ব্লকগুলি কোড চালানো উচিত নয়। অবশেষে ব্লকের কোডটি ধরে নেওয়া যেতে পারে যে এটি নির্ভর করে যে সাবসিস্টেমগুলির উপর নির্ভর করে এটি স্বাস্থ্যকর, যখন বাস্তবে তারা গভীরভাবে ভেঙে যেতে পারে। শেষ অবধি কোডটি আরও খারাপ করতে পারে।
উদাহরণস্বরূপ, আমি প্রায়শই এই ধরণের জিনিস দেখতে পাই:
DisableAccessToTheResource();
try
{
DoSomethingToTheResource();
}
finally
{
EnableAccessToTheResource();
}
এই কোডটির লেখক ভাবছেন "আমি বিশ্বের রাজ্যে একটি অস্থায়ী পরিবর্তন আনছি; আমার বলা হওয়ার আগে আমার যে অবস্থা ছিল তা আমার পুনরুদ্ধার করা দরকার"। তবে আসুন আমরা যেভাবে ভুল হতে পারি তার সমস্ত উপায় সম্পর্কে চিন্তা করি।
প্রথমত, উত্স অ্যাক্সেস কলার দ্বারা ইতিমধ্যে অক্ষম করা যেতে পারে; সেক্ষেত্রে এই কোডটি সম্ভবত অকাল পূর্বে এটি পুনরায় সক্ষম করে।
দ্বিতীয়ত, যদি ডসোমিংথিংটোর রিসোর্স একটি ব্যতিক্রম ছুঁড়ে, তবে উত্সটিতে অ্যাক্সেস সক্ষম করার জন্য সঠিক জিনিসটি কি ??? সংস্থানটি পরিচালনা করে এমন কোডটি অপ্রত্যাশিতভাবে ভেঙে গেছে । এই কোডটি বলছে, বাস্তবে "যদি ম্যানেজমেন্ট কোডটি ভাঙা হয় তবে নিশ্চিত হয়ে নিন যে অন্য কোডটি যত তাড়াতাড়ি সম্ভব সেই ভাঙা কোডটিকে কল করতে পারে, যাতে এটি ভয়াবহভাবে ব্যর্থও হতে পারে ।" এটি একটি খারাপ ধারণা বলে মনে হচ্ছে।
তৃতীয়ত, যদি ডসোমিংথিংটোর রিসোর্স একটি ব্যতিক্রম ছুঁড়ে ফেলেছে, তবে আমরা কীভাবে জানি যে সক্ষমের অ্যাক্সেসটোওআরসোর্স একটি ব্যতিক্রম ছুঁড়ে না ফেলে? রিসোর্সের ব্যবহার যা-ই হোক না কেন অসুবিধা ক্লিনআপ কোডকেও প্রভাবিত করতে পারে, সেক্ষেত্রে মূল ব্যতিক্রমটি নষ্ট হয়ে যাবে এবং সমস্যাটি নির্ণয় করা আরও কঠিন হবে।
আমি চেষ্টা করি অবশেষে ব্লকগুলি ব্যবহার না করে এই জাতীয় কোড লেখার প্রবণতা:
bool wasDisabled = IsAccessDisabled();
if (!wasDisabled)
DisableAccessToTheResource();
DoSomethingToTheResource();
if (!wasDisabled)
EnableAccessToTheResource();
এখন রাজ্যটির পরিবর্তন হওয়া দরকার না যতক্ষণ না দরকার। কলারের অবস্থা এখন গোলমাল নয়। এবং এখন, যদি ডোসোমিংথিংটোর রিসোর্স ব্যর্থ হয়, তবে আমরা অ্যাক্সেসটিকে পুনরায় সক্ষম করব না। আমরা ধরে নিই যে কোনও কিছু গভীরভাবে ভেঙে গেছে এবং চলমান কোড চালিয়ে যাওয়ার চেষ্টা করে পরিস্থিতি আরও খারাপ করার ঝুঁকি নেই। কলকারীরা যদি তারা পারেন তবে সমস্যাটি মোকাবেলা করুন।
সুতরাং অবশেষে ব্লক চালানো কখন ভাল ধারণা? প্রথমত, ব্যতিক্রম যখন প্রত্যাশিত হয়। উদাহরণস্বরূপ, আপনি আশা করতে পারেন যে কোনও ফাইল লক করার প্রচেষ্টা ব্যর্থ হতে পারে, কারণ অন্য কেউ এটি লক করেছে। সেক্ষেত্রে ব্যতিক্রমটি ধরা এবং ব্যবহারকারীর কাছে এটি রিপোর্ট করা বোধগম্য। সেক্ষেত্রে যা ভেঙে গেছে তা নিয়ে অনিশ্চয়তা হ্রাস পায়; আপনি পরিষ্কার করে জিনিসগুলি আরও খারাপ করার সম্ভাবনা নেই।
দ্বিতীয়ত, আপনি যে সংস্থানটি পরিষ্কার করছেন তা হ'ল দুষ্প্রাপ্য সিস্টেমের সংস্থান। উদাহরণস্বরূপ, শেষ অবধি একটি ফাইল হ্যান্ডেল বন্ধ করা বুদ্ধিমান হয়ে যায়। (একটি "ব্যবহার করা" অবশ্যই চেষ্টা-অবরুদ্ধ ব্লকটি লেখার অন্য একটি উপায়)) ফাইলের বিষয়বস্তু দূষিত হতে পারে তবে আপনি এখনই এটি করতে পারবেন না। ফাইল হ্যান্ডেলটি শেষ পর্যন্ত বন্ধ হতে চলেছে, সুতরাং এটি পরে হওয়ার চেয়ে তাড়াতাড়ি হতে পারে।