استثناها (Exceptions)
استثناها (Exceptions) یعنی مدیریت خطا هنگام اجرا. وقتی خطا رخ می دهد، برنامه معمولاً می ایستد. اما با استثنا، برنامه نمی ریزد و پیام مناسب می دهد.
استثنا چیست؟
وقتی خطا رخ دهد، برنامه «پرتاب (throw)» می کند. سپس «گرفتن (catch)» آن، خطا را مدیریت می کند. این کار جلوی کرش را می گیرد.
try / throw / catch
سه کلمه کلیدی داریم: try برای آزمودن کد، throw برای پرتاب خطا، و catch برای گرفتن خطا.
try {
throw 505;
}
catch (int errorCode) {
cout << "Error occurred: " << errorCode;
}
نکته: این جا عدد 505 مثل «کد خطا» است.
نمونه واقعی: سن مجاز
می خواهیم سن را چک کنیم. اگر کافی نبود، استثنا پرتاب کنیم.
try {
int age = 15;
if (age >= 18) {
cout << "Access granted - you are old enough.";
}
else {
throw (age);
}
}
catch (int myNum) {
cout << "Access denied - You must be at least 18 years old.\n";
cout << "Age is: " << myNum;
}
وقتی خطا رخ ندهد
اگر سن کافی باشد، بلوک catch اجرا نمی شود.
int age = 20;
پرتاب کُد خطا
گاهی بهتر است عدد ثابت پرتاب کنیم. این عدد برای پیگیری خطا است.
try {
int age = 15;
if (age >= 18) {
cout << "Access granted - you are old enough.";
}
else {
throw 505;
}
}
catch (int myNum) {
cout << "Access denied - You must be at least 18 years old.\n";
cout << "Error number: " << myNum;
}
گرفتن هر نوع استثنا
اگر نوع throw را ندانیم، از catch(...) استفاده می کنیم.
try {
int age = 15;
if (age >= 18) {
cout << "Access granted - you are old enough.";
}
else {
throw 505;
}
}
catch (...) {
cout << "Access denied - You must be at least 18 years old.\n";
}
گام های عملی
- کد حساس را داخل
tryبگذار. - در شرایط خطا، با
throwپرتاب کن. - در
catchپیام مناسب نشان بده.
نکته: برای یادگیری ریشه خطاها، به صفحه خطاها برو. سپس برای یافتن خطاها، اشکال زدایی را تمرین کن.
جمع بندی سریع
tryاجرا را می آزماید.throwخطا را پرتاب می کند.catchخطا را مدیریت می کند.catch(...)هر نوعی را می گیرد.- کُد خطا پیگیری را آسان می کند.