Exception হলো কোন প্রোগ্রামের অপ্রত্যাশিত বা উদ্ভট আচরণ/ত্রুটি। এটি Run time এ ঘটে। এই ত্রুটিগুলো আপনি আগে থেকে সহজে বুঝতে পারবেন না। উদাহরণ স্বরূপ, ধরুন আপনার প্রোগ্রাম কোন একটা ফাইল থেকে কিছু ডাটা পড়বে কিন্তু প্রোগ্রামটি চলাকালীন সময়ে যদি ঐ ফাইলটি মিসিং থাকে বা সঠিক লোকেশানে ফাইলটি পাওয়া না যায় বা ফাইলটির মেমোরি বেশি হওয়ার কারনে যদি ডাটাগুলো লোড না করতে পারে তাহলে এক্সেপশন ঘটবে। আবার প্রোগ্রামের কোনো পর্যায়ে কোনো সংখ্যাকে ০(শূন্য) দিয়ে ভাগ করলেও এক্সেপশন তৈরি হয়। সাধারণত এই সকল ক্ষেত্রে আমরা এক্সেপশন হ্যান্ডলিং করে থাকি।Exception Handling হল একধরনের মেকানিজম যার মাধ্যমে আপনি আপনার প্রোগ্রামের অপ্রত্যাশিত আচরনের সময় প্রোগ্রামটাকে স্থিতিশীল রাখতে পারবেন। C শার্পে Exception হল একধরনের Class । যখন Exception ঘটে তখন মূলত আপনার প্রোগ্রাম Exception Class (Exception Class এর derived Class ও হতে পারে) এর Object throw করে।
একেবারে নবীন C# প্রোগ্রামারদের জন্য Exception এর কিছু টার্ম একটু কঠিন মনেহতে পারে। আশাকরি পুরো টিউটোরিয়ালটি পড়ার পর নবীনরাও Exception Handling সম্পর্কে কিছুটা হলেও জানবে 🙂 সহজ একটি প্রোগ্রাম দিয়ে Exception Handling কি তা আমি বুঝানোর চেষ্টা করবো। শুরুতেই আমি ধরে নিচ্ছি আপনারা C# এর Windows Forms Application /WPF Application এবং Object Oriented Programming (OOP) এর কিছু বেসিক জানেন বা আগে প্র্যাকটিস করেছেন।
মনেকরুন আপনার প্রোগ্রামের ইউজার ইনপুট হিসেবে কতটা টিকিট কিনবে তার সংখ্যা দিবেন। প্রতিটি টিকিটের মূল্য যদি ৫০ টাকা হয় তাহলে আপনার প্রোগ্রামের কাজ হবে ইউজার ইনপুটের সাথে ৫০ গুন করে তা ইউজারকে দেখানো। প্রথমে আমি বুঝার সুবিধার্থে UI (User Interface) বিহাইন্ডে কোড করবো পরবর্তীটি OOP Concept ব্যাবহার করবো। তাহলে UI টি নিচের মতো কল্পনা করা যায়:
প্রথমে আমি new Windows Forms Application প্রজেক্ট open করলাম।ফর্মে Text Box এর নাম দিলাম noOfTicketTextBox এবং Button এর নাম দিলাম totalPriceButton।
প্রোগ্রামটি এখন একটু বুঝার চেষ্টা করি, ইউজার ইনপুট হিসেবে 7 দিয়ে Total Price Button ক্লিক করলে তাকে একটা Message Box এ নিচের ছবির মতো Total Price 350 taka দেখিয়ে দিবে।
Total Price Button এর Click event কোডটি নিন্মরূপ:
private void totalPriceButton_Click(object sender, EventArgs e)
{
byte noOfTickets = byte.Parse(noOfTicketTextBox.Text);
double totalPrice = 50 * noOfTickets;
MessageBox.Show(totalPrice.ToString() + " taka", "Total Price");
}
এই কোড থেকে আমরা দেখতে পাচ্ছি ইউজার যদি 255 বা এর চেয়ে ছোট সংখ্যা ইনপুট দেয় তাহলে প্রোগ্রামটি সঠিক ভাবে কাজ করবে (কারণ byte এর রেঞ্জ 255 পর্যন্ত), কিন্তু তার চেয়ে বড় সংখ্যা বা ইনপুট হিসেবে কোন String বা কোন ইনপুট না দিয়ে যদি ইউজার Total Price Button ক্লিক করে তাহলে কি হবে?
ধরুন আমি ইনপুট হিসেবে String দিলাম:
এখন Total Price Button ক্লিক করার নিচের ছবির মতো ঘটনা ঘটবে:
এর মানে হচ্ছে প্রোগ্রামটা Exception throw করে বেরিয়ে গেছে। হলুদ রং চিহ্নিত
byte noOfTickets = byte.Parse(noOfTicketTextBox.Text); লাইনটিতে Error দেখাচ্ছে।
এখানে Exception এর message হচ্ছে “Input string was not in a correct format.” এবং Exception এর type হচ্ছে “FormatException”। যদি আরো বিস্তারিত জানতে চান তাহলে View Detail এ ক্লিক করে জানতে পারবেন। এখানে Exception টা ঘটেছে কারণ ইউজার ইনপুট হিসেবে যেই String দিয়েছে সেটিকে byte.Parse(noOfTicketTextBox.Text) কমান্ডটি বাইটে কনভার্ট করতে পারছেনা। আবার ইউজার যদি কোন ইনপুট না দিয়ে Total Price বাটনে ক্লিক করে তাহলেও Exception ঘটবে। এবার Exception Handle করার পদ্ধতিটা দেখে নিই।
Exception Handle করার জন্য try/catch blocks ব্যাবহার করা হয়। কোডের যেই অংশটি Exception throw করতে পারে সেই অংশটিকে try block এবং Exception Handling এর কোডগুলো catch block রাখতে হবে। এবার Total Price Button এর Click event টিকে Exception Handling এর মেকানিজম দিয়ে নিচের মতো লিখি:
private void totalPriceButton_Click(object sender, EventArgs e)
{
try
{
byte noOfTickets = byte.Parse(noOfTicketTextBox.Text);
double totalPrice = 50 * noOfTickets;
MessageBox.Show(totalPrice.ToString() + " taka", "Total Price");
}
catch(Exception exceptionObj)
{
MessageBox.Show("Please Check your input.");
//MessageBox.Show(exceptionObj.Message);
}
}
এবার ইনপুট হিসেবে যদি কোন String দিই তাহলে:
এখন আমরা দেখলাম Exception Handling মেকানিজম এর কারনে Application বের হয়ে যায়নি বরং ইউজারকে একটি সঠিক Message দেখাতে পারছি।
এবার Total Price Button এর Click event কোডটিকে আরো সুন্দরভাবে নিচের মতো লিখতে পারি। এতে করে ইউজারের মেসেজকে আরো স্পেসিফাই করে দেয়া যাবে।
private void totalPriceButton_Click(object sender, EventArgs e)
{
try
{
byte noOfTickets = byte.Parse(noOfTicketTextBox.Text);
double totalPrice = 50 * noOfTickets;
MessageBox.Show(totalPrice.ToString() + " taka", "Total Price");
}
catch (FormatException formatExObj)
{
MessageBox.Show("Please enter numeric value.");
}
catch (OverflowException overflowExObj)
{
MessageBox.Show("No. of Tickets must be between 1 to 255.");
}
catch (Exception exceptionObj)
{
MessageBox.Show("Unknown error occurred! please contact to vendor.");
}
}
এখানে ইউজার যদি String ইনপুট দেয় তাহলে byte.Parse() মেথডটি FormatException throw করবে তাহলে FormatException এর catch ব্লকটি execute হবে।
ইনপুট হিসেবে যদি 255 এর বেশি সংখ্যা দেয়াহয় তাহলে তাহলে byte.Parse() মেথডটি OverflowException throw করবে এবং OverflowException এর catch ব্লকটি execute হবে।
এর বাইরে অন্য কোন অপ্রত্যাশিত Exception ঘটলে তৃতীয় catch ব্লকটি execute হবে।
FormatException এবং OverflowException হচ্ছে Exception Class এর derived Class। Exception Architecture এর মধ্যে Exception হলো সবার base class.
পরবর্তী পর্বে ইনশাআল্লাহ্ কোডগুলো UI থেকে সরিয়ে Class Concept এ দেখানোর চেষ্টা করবো।
লিখাটির কোথাও যদি ভুল থাকে তাহলে অবশ্যই পরামর্শ দিবেন 🙂
টিউটোরিয়ালটি BASIS এর Training Program এর সাহায্য নিয়ে লিখা। কৃতজ্ঞতা: Zohirul Alam Tiemoon ভাই।
আমার সম্পর্কে:
মু. হাসনাত রিয়াজ,
কম্পিউটার সায়েন্স এন্ড টেলিকমিউনিকেশন ইঞ্জিনিয়ারিং বিভাগ,
নোয়াখালী বিজ্ঞান ও প্রযুক্তি বিশ্ববিদ্যালয়।
আমি Hasnat Riaz। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 12 বছর যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 16 টি টিউন ও 14 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 1 ফলোয়ার আছে এবং আমি টেকটিউনসে 0 টিউনারকে ফলো করি।
প্রাক্তন ছাত্র, কম্পিউটার সায়েন্স এন্ড টেলিকমিউনিকেশন ইঞ্জিনিয়ারিং বিভাগ, নোয়াখালী বিজ্ঞান ও প্রযুক্তি বিশ্ববিদ্যালয়।
Thank you Vi.