যদি কোনও ভাষা সহজাতভাবে ব্যতিক্রমগুলিকে সমর্থন করে তবে তার ব্যতিক্রম ছুঁড়ে দেওয়া পছন্দ করা হয় এবং ক্লায়েন্টরা ব্যর্থতার ফলস্বরূপ না চাইলে ব্যতিক্রমটি ধরতে পারে। আসলে, আপনার কোডের ক্লায়েন্টরা ব্যতিক্রমগুলি প্রত্যাশা করে এবং অনেকগুলি বাগে চলে যাবে কারণ তারা ফেরতের মানগুলি পরীক্ষা করবে না।
আপনার পছন্দ থাকলে ব্যতিক্রমগুলি ব্যবহার করার বেশ কয়েকটি সুবিধা রয়েছে।
বার্তা
ব্যতিক্রমগুলিতে ব্যবহারকারীর পঠনযোগ্য ত্রুটি বার্তাগুলি রয়েছে যা বিকাশকারীরা ডিবাগিংয়ের জন্য ব্যবহার করতে পারেন বা এমনকি ইচ্ছা করলে ব্যবহারকারীদের কাছে প্রদর্শিত হতে পারে। যদি গ্রাহক কোড ব্যতিক্রমটি পরিচালনা করতে না পারে তবে এটি সর্বদা এটি লগ করতে পারে যাতে বিকাশকারীরা প্রতিটি অন্যান্য ট্রেস থামিয়ে না দিয়ে লগের মধ্য দিয়ে যেতে পারে যে ফেরতের মান কী ছিল তা নির্ধারণ করতে এবং এটি কী ছিল তা নির্ধারণের জন্য এটি একটি টেবিলের মধ্যে ম্যাপ করতে পারে প্রকৃত ব্যতিক্রম
রিটার্ন মান সহ, অতিরিক্ত কোনও তথ্য সহজেই সরবরাহ করা যায় না। কিছু ভাষাগুলি শেষ ত্রুটি বার্তাটি পেতে পদ্ধতি কল করার পক্ষে সমর্থন করবে, সুতরাং এই উদ্বেগটি কিছুটা কমিয়ে দেওয়া হয়েছে, তবে এর জন্য ফোনকারীকে অতিরিক্ত কল করার প্রয়োজন হয় এবং কখনও কখনও এই তথ্য বহন করে এমন একটি 'বিশেষ অবজেক্টে' অ্যাক্সেসের প্রয়োজন হয়।
ব্যতিক্রম বার্তাগুলির ক্ষেত্রে, আমি যথাসম্ভব প্রসঙ্গ সরবরাহ করি, যেমন:
"Foo" নামের একটি নীতি ব্যবহারকারী "বার" এর জন্য পুনরুদ্ধার করা যায়নি, যা ব্যবহারকারীর প্রোফাইলে রেফারেন্স করা হয়েছিল।
এটি একটি রিটার্ন কোড -85 এর সাথে তুলনা করুন। আপনি কোনটি পছন্দ করবেন?
স্ট্যাক কল
ব্যতিক্রমগুলিতে সাধারণত বিশদ কল স্ট্যাক থাকে যা ডিবাগ কোডটিকে দ্রুত এবং তাত্ক্ষণিক সহায়তা করে এবং যদি ইচ্ছা হয় তবে কলিং কোড দ্বারা লগও করা যেতে পারে। এটি বিকাশকারীদের সাধারণত সঠিক লাইনে সমস্যাটি চিহ্নিত করতে দেয় এবং এইভাবে খুব শক্তিশালী। আবার, এটির তুলনা করুন কোনও লগ ফাইলের সাথে রিটার্ন মানগুলির (যেমন একটি -85, 101, 0, ইত্যাদি) সাথে তুলনা করুন, আপনি কোনটি পছন্দ করবেন?
দ্রুত পক্ষপাতমূলক পদ্ধতির ব্যর্থতা
যদি কোনও পদ্ধতি ব্যর্থ হয় এমন কোথাও বলা হয় তবে এটি ব্যতিক্রম ছুঁড়ে দেবে। কলিং কোডটি হয় ব্যতিক্রমটিকে স্পষ্টভাবে দমন করতে হবে অথবা এটি ব্যর্থ হবে। আমি এটি আসলেই আশ্চর্যজনক বলে খুঁজে পেয়েছি কারণ বিকাশ এবং পরীক্ষার সময় (এবং এমনকি উত্পাদনেও) কোডটি দ্রুত ব্যর্থ হয়, বিকাশকারীদের এটি ঠিক করতে বাধ্য করে। রিটার্ন মানগুলির ক্ষেত্রে, যদি কোনও ফেরতের মূল্যের জন্য চেকটি মিস করা হয় তবে ত্রুটিটি চুপচাপ উপেক্ষা করা হয় এবং বাগটি কোথাও অপ্রত্যাশিতভাবে সরে যায়, সাধারণত ডিবাগ করতে এবং ঠিক করতে আরও বেশি ব্যয় হয়।
মোড়ানো এবং মুদ্রণ ব্যতিক্রমগুলি
ব্যতিক্রমগুলি অন্যান্য ব্যতিক্রমগুলির মধ্যে আবৃত থাকতে পারে এবং তারপরে প্রয়োজনে আন-র্যাপ করা যেতে পারে। উদাহরণস্বরূপ, আপনার কোডটি নিক্ষিপ্ত হতে পারে ArgumentNullException
যা কলিং কোডটি কোনওর মধ্যে গুটিয়ে রাখতে পারে UnableToRetrievePolicyException
কারণ কলিং কোডে সেই অপারেশন ব্যর্থ হয়েছিল। যদিও আমি উপরে বর্ণিত উদাহরণটির অনুরূপ কোনও ব্যবহারকারীকে একটি বার্তা প্রদর্শিত হতে পারে, কিছু ডায়াগনস্টিক কোড ব্যতিক্রমটিকে আনপ্রেপ করতে পারে এবং খুঁজে পেতে পারে যে ArgumentNullException
এটির কারণে সমস্যা হয়েছে, যার অর্থ এটি আপনার গ্রাহকের কোডে কোডিং ত্রুটি। এটি তখন একটি সতর্কতা শুরু করতে পারে যাতে বিকাশকারী কোডটি ঠিক করতে পারেন। রিটার্ন মানগুলির সাথে এই জাতীয় উন্নত পরিস্থিতিতে বাস্তবায়ন করা সহজ নয়।
কোড সরলতা
এটি ব্যাখ্যা করতে কিছুটা শক্ত, তবে আমি এই কোডিংয়ের মাধ্যমে ফিরতি মান এবং ব্যতিক্রম উভয়ই শিখেছি। রিটার্ন মানগুলি ব্যবহার করে যে কোডটি লেখা হয়েছিল সেগুলি সাধারণত একটি কল করে এবং তারপরে রিটার্নের মানটি কী তা নিয়ে একটি সিরিজ চেক থাকে। কিছু ক্ষেত্রে, এটি অন্য পদ্ধতিতে কল করবে এবং এখন সেই পদ্ধতি থেকে ফেরত মানগুলির জন্য আরও একটি সিরিজ চেক থাকবে। ব্যতিক্রম সহ, ব্যতিক্রম হ্যান্ডলিং সমস্ত ক্ষেত্রে না হলেও বেশিরভাগ ক্ষেত্রেই সহজ। ক্লিন-আপের জন্য শেষ অবধি ব্লকগুলিতে কোড চালানোর জন্য রানটাইম যথাসাধ্য চেষ্টা করে আপনার একটি চেষ্টা / ধরা / অবশেষে ব্লক রয়েছে। এমনকি নেস্টেড ট্রাই / ক্যাচ / অবশেষে ব্লকগুলি নেস্টেড যদি / অন্যথায় এবং একাধিক পদ্ধতি থেকে সম্পর্কিত রিটার্ন মানগুলির তুলনায় অনুসরণ করা এবং বজায় রাখা তুলনামূলকভাবে সহজ।
উপসংহার
যদি আপনি যে প্ল্যাটফর্মটি ব্যবহার করছেন সেটি যদি ব্যতিক্রমগুলি সমর্থন করে (যেমন জাভা বা। নেট), তবে অবশ্যই আপনাকে ধরে নেওয়া উচিত যে ব্যতিক্রম ছোঁড়া ছাড়া আর কোনও উপায় নেই কারণ এই প্ল্যাটফর্মগুলিতে ব্যতিক্রম ছোঁড়ার গাইডলাইন রয়েছে এবং আপনার ক্লায়েন্টরা আশা করতে চলেছে তাই। আমি যদি আপনার লাইব্রেরিটি ব্যবহার করতাম তবে আমি ফিরে আসার মানগুলি পরীক্ষা করতে বিরক্ত করব না কারণ আমি আশা করি ব্যতিক্রমগুলি নিক্ষেপ করা হবে, এই প্ল্যাটফর্মগুলির পৃথিবীটি এটিই।
তবে এটি যদি সি ++ হত তবে এটি নির্ধারণ করা কিছুটা চ্যালেঞ্জ হবে কারণ রিটার্ন কোডগুলির সাথে ইতিমধ্যে একটি বৃহত কোডবেস উপস্থিত রয়েছে এবং ব্যতিক্রমগুলির বিপরীতে বিপুল সংখ্যক বিকাশকারী মানগুলি ফিরিয়ে আনতে সক্ষম হয় (যেমন উইন্ডোজ এইচআরআইসিলটিসের সাথে দ্বন্দ্বপূর্ণ) । তদ্ব্যতীত, অনেক অ্যাপ্লিকেশনগুলিতে এটি একটি পারফরম্যান্স সমস্যাও হতে পারে (বা কমপক্ষে এটি অনুভূত)।
try
/catch
বিদ্যমান। উপরন্তু, আপনি আপনার লাগাতে পারেনtry
/catch
(উদ্বেগের বৃহত্তর বিচ্ছেদের জন্য, যার ফলে) এটি পরিচালনা করার জন্য আরো একটি উপযুক্ত অবস্থান আরও আপ অনেক স্ট্যাক।