এক্সেপশন হ্যান্ডেলিং (Exception Handling)
জিনিসপত্র কেন কাজ করে না বা নষ্ট হয়? (Why Things Go Wrong)
প্রোগ্রামগুলো সহজেই ক্র্যাশ (crash) করতে পারে বা নষ্ট হতে পারে। অনেক সময় ফাইলগুলো হারিয়ে যায়। আপনি হয়তো একটি নম্বরের জন্য জিজ্ঞাসা করেছেন, কিন্তু ব্যবহারকারী (user) সেখানে লিখে দিয়েছে "জাম"। আবার হয়তো কোনো কিছু ডাউনলোড করার মাঝপথেই ইন্টারনেট সংযোগ বিচ্ছিন্ন হয়ে গেছে। একজন দক্ষ ডেভেলপার শুধু কাজ চালানোর মতো কোডই লেখেন না — বরং তিনি এমন কোড লেখেন যা কোনো ত্রুটি (error) হলেও সুন্দরভাবে পরিস্থিতি সামাল দিতে পারে (fails gracefully)।
সি শার্পে (C#) যখন কোনো কিছু ঠিকমতো কাজ করে না, তখন সিস্টেমটি একটি এক্সেপশন (exception) বা সমস্যা থ্রো (throw) করে বা ছুঁড়ে দেয় — এটি অনেকটা ফায়ার অ্যালার্ম বা বিপদের ঘণ্টা বাজানোর মতো। যদি কেউ সেই অ্যালার্মটিকে নিয়ন্ত্রণ না করে (বা এক্সেপশনটিকে ক্যাচ (catch) না করে), তবে ভবনের সবাই আতঙ্কে বেরিয়ে পড়বে (অর্থাৎ আপনার প্রোগ্রামটি ক্র্যাশ করবে)। কিন্তু আপনি যদি একটি হ্যান্ডলার (handler) তৈরি করে রাখেন, তবে আপনি খুব শান্তভাবে এই সমস্যাটির সমাধান করতে পারবেন।
এর জন্য তিনটি প্রধান কিওয়ার্ড (keywords) রয়েছে:
try— "এখানে এমন কিছু কোড আছে, যা কাজ করার সময় হয়তো কোনো সমস্যা (fail) হতে পারে।"catch— "যদি আসলেই কোনো সমস্যা হয়, তবে এরপর কী করতে হবে তা এখানে বলে দেওয়া হলো।"finally— "কোড ঠিকমতো কাজ করুক বা না করুক, সবার শেষে সব সময় এটি অবশ্যই করবে।"
পরিচিতি: try/catch/finally (Basic try/catch/finally)
সাধারণ কিছু এক্সেপশনের ধরন (Common Exception Types)
সি শার্পে (C#) আগে থেকেই তৈরি করা অনেক ধরনের এক্সেপশন (exception) রয়েছে। নিচে এমন কিছু এক্সেপশনের নাম দেওয়া হলো, যা আপনি সবচেয়ে বেশি দেখতে পাবেন:
NullReferenceException— আপনি এমন কিছু ব্যবহার করার চেষ্টা করেছেন, যার মান বা ভ্যালু আসলেnullঅথবা খালি (এটি সি শার্পের এক নম্বর বাগ বা ত্রুটি!)ArgumentException/ArgumentNullException— কোনো মেথডে ভুল বা খারাপ ইনপুট (input) দেওয়া হয়েছেInvalidOperationException— এই কাজটি করার জন্য অবজেক্টটি এখন সঠিক অবস্থায় (state) নেইIndexOutOfRangeException— অ্যারে (array) বা লিস্টের (list) ইনডেক্স (index) অনেক বড় অথবা নেগেটিভ (negative) বা ঋণাত্মক হয়ে গেছেFormatException— কোনো স্ট্রিংকে পার্স (parse) করে বা পরিবর্তন করে নম্বরে রূপান্তর করা যাচ্ছে নাFileNotFoundException— ফাইলটি খুঁজে পাওয়া যাচ্ছে নাDivideByZeroException— গণিতের নিয়মে কোনো কিছুকে শূন্য (0) দিয়ে ভাগ করার চেষ্টা করা হয়েছেKeyNotFoundException— ডিকশনারিতে (dictionary) যে কি-টি (key) খোঁজা হচ্ছে, সেটি নেই
সব এক্সেপশনই মূলত System.Exception থেকে ইনহেরিট (inherit) করে হয়ে থাকে। আপনি যখন শুধু Exception ক্যাচ (catch) করেন, তখন এটি সব ধরনের এক্সেপশনকেই ধরে ফেলে — কিন্তু নির্দিষ্ট ধরনের এক্সেপশনগুলোকে ক্যাচ করা অনেক বেশি ভালো, কারণ এতে আপনি ঠিকভাবে বুঝতে পারবেন যে আসলে কোথায় বা কী সমস্যা হয়েছে।
এক্সেপশন থ্রো (Throwing Exceptions) করা এবং কাস্টম এক্সেপশন (Custom Exceptions)
রিয়েল ওয়ার্ল্ড বা দৈনন্দিন জীবনের প্যাটার্ন: TryParse বনাম Parse (Real-World Pattern: TryParse vs Parse)
ছোট কুইজ
পড়া চালিয়ে যান