ব্যতিক্রমগুলি কেবল এটিই হওয়া উচিত .. ব্যতিক্রম। ব্যতিক্রমগুলি ব্যবহার করার সময় সর্বোত্তম অনুশীলন হ'ল তাদের পরিস্থিতিটি আবরণে ব্যবহার করা যাতে আপনি যা প্রত্যাশা করবেন তার বিপরীতে কিছু ঘটে। ক্লাসিক উদাহরণটি ফাইলনটফাউন্ডএক্সসেপশন যা কোনও ফাইল কেবল সেখানে না থাকলে নিক্ষিপ্ত হয়। আপনি যদি ফাইলটির অস্তিত্ব পরীক্ষা করে দেখেন তবে আপনি ফাইল.এক্সিস্টগুলি () ব্যবহার করেন যেহেতু আপনি কোনও কিছু আঘাত করেছেন কিনা তা দেখার জন্য আপনি কেবল 10 ফুটের লাঠি দিয়ে সাজিয়ে যাচ্ছেন।
আপনি প্রযুক্তিগতভাবে এটির ফলাফলটিকে চেষ্টা করে দেখার চেষ্টা করে এবং ফাইলটি যেমন বিদ্যমান ছিল তা ব্যবহার করে একই ফলাফল অর্জন করতে পারেন তবে ক) ব্যতিক্রমগুলি সাধারণত ব্যয়বহুল সংস্থান-ভিত্তিক এবং বি) প্রোগ্রামাররা ধরে নিচ্ছে যে ফাইলটি যদি উপস্থিত থাকে তবে এটি বিদ্যমান ছিল একটি চেষ্টা ধরা, যা একটি প্রোগ্রামের সামগ্রিক বিভ্রান্তি যোগ করে।
অনেকগুলি পরিস্থিতিতে রয়েছে যেখানে আমি একটি পদ্ধতি লিখব যা একটি ডাটাবেস থেকে কিছু মান নিয়ে আসে। এক হাজার জিনিস ভুল হতে পারে এবং আমি কীভাবে কেবলমাত্র একটি ছোট টুকরো তথ্যের প্রয়োজন তা দেখে কলকে চার্জ করা অসুবিধাজনকভাবে চেষ্টা করার তালিকার সাথে 5 টি ব্যতিক্রম রয়েছে। সুতরাং, আমি আনার পদ্ধতিতে ব্যতিক্রমগুলি ধরব। যদি কিছু ভুল হয়ে যায় তবে আমি ডাটাবেস সংযোগ বন্ধ করতে বা যথাযথ পদক্ষেপে নোট নোট করার জন্য যথাযথ পদক্ষেপ গ্রহণ করি এবং নাল ফেরায়। এটি আপনার অনুশীলনকে সহজ করার কারণেই এটি ভাল অনুশীলন নয়, কারণ "নাল" একই বার্তা প্রেরণ করে যা আপনি ব্যতিক্রম থেকে অর্জন করতে পারেন .. যা পরিকল্পনা অনুসারে কিছু যায় নি। আনার পদ্ধতিতে ব্যতিক্রমের নির্দিষ্টকরণগুলি পরিচালনা করুন, তবে জিনিসগুলি যখন ডোন না করে তখন কী করতে হবে তা পরিচালনা করুন '
উদাহরণ স্বরূপ:
Integer getUserCount() {
Integer result = null;
try {
// Attempt to open database and retrieve data
} catch (TimeoutException e) {
logger.error("Got a watch?");
} catch (MissingDatabaseException e) {
logger.error("What are you smoking?");
} catch (PermissionsToReadException e) {
logger.error("Did you *really* think you were getting away with that?");
} catch (PressedSendButtonToHardException e) {
logger.error("Seriously.. just back away from the computer... slowly..");
} catch (WTFException e) {
logger.error("You're on your own with this one.. I don't even know what happened..");
} finally {
// Close connections and whatnot
}
return result;
}
void doStuff() {
Integer result = getUserCount();
if(result != null) {
// Went as planned..
}
}