সফটওয়্যার ডেভেলপমেন্ট ইন C শার্প (C#)- [পর্ব-০৮] :: Exception Handling -১

ডেভেলপমেন্ট ইন C শার্প

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 ভাই।

আমার সম্পর্কে:

মু. হাসনাত রিয়াজ,

কম্পিউটার সায়েন্স এন্ড টেলিকমিউনিকেশন ইঞ্জিনিয়ারিং বিভাগ,

নোয়াখালী বিজ্ঞান ও প্রযুক্তি বিশ্ববিদ্যালয়।

Level 0

আমি Hasnat Riaz। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 11 বছর 5 মাস যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 16 টি টিউন ও 14 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 1 ফলোয়ার আছে এবং আমি টেকটিউনসে 0 টিউনারকে ফলো করি।

প্রাক্তন ছাত্র, কম্পিউটার সায়েন্স এন্ড টেলিকমিউনিকেশন ইঞ্জিনিয়ারিং বিভাগ, নোয়াখালী বিজ্ঞান ও প্রযুক্তি বিশ্ববিদ্যালয়।


টিউনস


আরও টিউনস


টিউনারের আরও টিউনস


টিউমেন্টস

Thank you Vi.

ভাই ডটনেট শেখার কোন বাংলা টিউটোরিয়েল আছে কি? বা কোথা থেকে ডটনেট ভালো ভাবে ডটনেট শিখতে পারবো জানালে খুশি হতাম এবং আমার ভবিষ্যতের কাজের জন্য অনেক উপকারে আসত।

ধন্যবাদ.

ভালো কোন বাংলা টিউটোরিয়াল আছে কিনা আমার জানা নেই। একটু কষ্ট করে সার্চ দিয়ে দেখবেন।আপনি আপাতত শুরু করার জন্য https://www.techtunes.io/programming/tune-id/47674 এই লিংকের টিটরিয়ালগুলো পড়তে পারেন। ভবিষ্যতে আপনি যখন ডাটাবেজ নিয়ে কাজ করবেন তখন http://www.shikkhok.com/%E0%A6%95%E0%A7%8B%E0%A6%B0%E0%A7%8D%E0%A6%B8-%E0%A6%A4%E0%A6%BE%E0%A6%B2%E0%A6%BF%E0%A6%95%E0%A6%BE/microsoft-sql-server2012/ এর লেকচারগুলো কাজে আসতে পারে। নীলক্ষেতে আপনি ভালো কিছু বাংলা বইও পেতে পারেন। আমি আসলে বাংলা টিউটোরিয়াল পড়িনি। John Sharp এর Visual c# step by step বইটি পড়ে শুরু করেছিলাম। BASIS এর .NET কোর্সের ভিডিওগুলো সংগ্রহ করে দেখলে অনেক ভালো শিখতে পারবেন।

@Badhon .Net Ba c# er upor bangla te kono valo boi nei. ja ase ta pore temon kono kajei apnar asbe na. Hasnat vai tao Kisu boi porsen ami to tao porar sujog paini. ami sudu youtube dekhesi r kisu valo maner source code study kore sikhtesi.