কাস্টম এক্সেপশন (Custom Exception) হলো C++ এ প্রোগ্রামারের নিজের তৈরি করা এক্সেপশন, যা সাধারণত স্ট্যান্ডার্ড এক্সেপশন (যেমন std::runtime_error বা std::logic_error) থেকে আলাদা এবং নির্দিষ্ট ত্রুটিপূর্ণ অবস্থাগুলিকে আরও স্পষ্টভাবে নির্দেশ করে। কাস্টম এক্সেপশন ক্লাস তৈরি করে প্রোগ্রামের বিভিন্ন স্থানে নির্দিষ্ট ত্রুটি পরিচালনা করা সহজ হয়।
কাস্টম এক্সেপশন তৈরি করা
C++ এ কাস্টম এক্সেপশন তৈরি করার জন্য সাধারণত std::exception ক্লাসটি ইনহেরিট করতে হয় এবং what() মেথড ওভাররাইড করে কাস্টম ত্রুটি বার্তা প্রদান করা হয়।
উদাহরণ: কাস্টম এক্সেপশন
#include <iostream>
#include <exception>
using namespace std;
class DivisionByZeroException : public exception { // কাস্টম এক্সেপশন ক্লাস
public:
const char* what() const noexcept override { // what() মেথড ওভাররাইড
return "Error: Division by zero is not allowed!";
}
};
int divide(int a, int b) {
if (b == 0) {
throw DivisionByZeroException(); // এক্সেপশন ছোড়া হচ্ছে
}
return a / b;
}
int main() {
try {
int result = divide(10, 0); // Division by zero এক্সেপশন ট্রিগার
cout << "Result: " << result << endl;
}
catch (const DivisionByZeroException& e) { // কাস্টম এক্সেপশন হ্যান্ডল করা
cout << e.what() << endl;
}
return 0;
}
বর্ণনা:
DivisionByZeroExceptionনামে একটি কাস্টম এক্সেপশন ক্লাস তৈরি করা হয়েছে, যাstd::exceptionক্লাস থেকে ইনহেরিট করা।what()মেথড ওভাররাইড করা হয়েছে, যা কাস্টম ত্রুটি বার্তা প্রদান করে।divide()ফাংশনে যদি ডেনোমিনেটর0হয়, তবেDivisionByZeroExceptionএক্সেপশন ছোড়া হয়।main()ফাংশনেcatchব্লক সেই এক্সেপশন ধরে এবংwhat()মেথডের মাধ্যমে ত্রুটি বার্তা প্রদর্শন করে।
কাস্টম এক্সেপশন আরও উদাহরণ: ফাইল সম্পর্কিত কাস্টম এক্সেপশন
#include <iostream>
#include <fstream>
#include <exception>
using namespace std;
class FileNotFoundException : public exception {
public:
const char* what() const noexcept override {
return "Error: File not found!";
}
};
void openFile(const string& filename) {
ifstream file(filename);
if (!file.is_open()) {
throw FileNotFoundException(); // ফাইল না পাওয়া গেলে এক্সেপশন ছোড়া
}
cout << "File opened successfully!" << endl;
}
int main() {
try {
openFile("nonexistent.txt"); // যে ফাইলটি নেই তা ওপেন করতে চেষ্টা করা হচ্ছে
}
catch (const FileNotFoundException& e) { // কাস্টম এক্সেপশন ক্যাচ করা
cout << e.what() << endl;
}
return 0;
}
বর্ণনা:
FileNotFoundExceptionনামে একটি কাস্টম এক্সেপশন ক্লাস তৈরি করা হয়েছে, যা ফাইল না পাওয়ার ক্ষেত্রে নির্দিষ্ট ত্রুটি বার্তা প্রদান করে।openFile()ফাংশনে যদি ফাইল খোলা সম্ভব না হয়, তবেFileNotFoundExceptionএক্সেপশন ছোড়া হয় এবংmain()এcatchব্লকে সেটি ধরা হয়।
কাস্টম এক্সেপশন ক্লাস তৈরি করার সময় কিছু নির্দেশনা
std::exceptionক্লাস থেকে ইনহেরিট করা: এটি করা জরুরি নয়, তবে করা হলেstd::exceptionএর বৈশিষ্ট্যগুলো সহজেই পাওয়া যায়।what()মেথড ওভাররাইড করা: কাস্টম বার্তা প্রদানের জন্যwhat()মেথড ওভাররাইড করে নির্দিষ্ট বার্তা প্রদান করা হয়।- কাস্টম তথ্য পাস করা: যদি এক্সেপশনের সময় অতিরিক্ত তথ্য পাস করতে হয়, তবে কনস্ট্রাক্টরের মাধ্যমে সেই তথ্য গ্রহণ করা যেতে পারে।
উদাহরণ: কনস্ট্রাক্টরের মাধ্যমে বার্তা পাস করা
#include <iostream>
#include <exception>
#include <string>
using namespace std;
class CustomException : public exception {
string message;
public:
CustomException(const string& msg) : message(msg) {}
const char* what() const noexcept override {
return message.c_str();
}
};
int main() {
try {
throw CustomException("Custom error occurred with additional details."); // কাস্টম বার্তা সহ এক্সেপশন ছোড়া হচ্ছে
}
catch (const CustomException& e) {
cout << e.what() << endl; // কাস্টম বার্তা প্রদর্শন করা হচ্ছে
}
return 0;
}
বর্ণনা:
- এখানে
CustomExceptionক্লাসে একটি কনস্ট্রাক্টর যোগ করা হয়েছে, যা একটি বার্তা গ্রহণ করে। what()মেথড ওভাররাইড করে সেই বার্তা প্রদর্শন করা হচ্ছে।
কাস্টম এক্সেপশনের সুবিধা
- বিশেষ ত্রুটি পরিচালনা: কাস্টম এক্সেপশন তৈরি করে বিশেষ ধরনের ত্রুটি সনাক্ত করা এবং সেগুলি সহজেই হ্যান্ডল করা যায়।
- কোডের পঠনযোগ্যতা বৃদ্ধি: কাস্টম এক্সেপশন ক্লাস ব্যবহার করলে কোডের পঠনযোগ্যতা বাড়ে এবং ত্রুটি হ্যান্ডলিং আরও পরিষ্কার হয়।
- পরিষ্কার বার্তা প্রদান: কাস্টম বার্তা প্রদান করে ত্রুটির সঠিক কারণ এবং অবস্থান সম্পর্কে স্পষ্ট ধারণা দেওয়া যায়।
- কোডের পুনঃব্যবহারযোগ্যতা বৃদ্ধি: একবার একটি কাস্টম এক্সেপশন ক্লাস তৈরি করলে তা অন্যান্য ফাংশন বা মডিউলে পুনরায় ব্যবহার করা যায়।
সারসংক্ষেপ
- কাস্টম এক্সেপশন হলো প্রোগ্রামারের নিজের তৈরি করা এক্সেপশন, যা বিশেষ ধরনের ত্রুটি হ্যান্ডলিংয়ে সহায়ক।
std::exceptionক্লাস থেকে ইনহেরিট করে কাস্টম এক্সেপশন ক্লাস তৈরি করা যায়।what()মেথড ওভাররাইড করে কাস্টম বার্তা প্রদান করা যায়।
কাস্টম এক্সেপশন ব্যবহার করে ত্রুটি হ্যান্ডলিং আরও নির্দিষ্ট এবং কার্যকরী করা যায়, যা বড় প্রোগ্রামে ত্রুটি সনাক্ত ও সমাধানকে সহজ করে।