Xatolarni boshqarish (try va catch) — havaskor dasturchini professionaldan ajratib turadigan mavzu. Har qanday dastur xato bilan uchrashadi: foydalanuvchi noto’g’ri ma’lumot kiritadi, xotira yetmaydi, nolga bo’lish sodir bo’ladi. Yaxshi dastur bunda “qulab tushmaydi”, balki xatoni ushlab, oqilona javob beradi. Bu — C++ qo’llanmasining yakuniy mavzusi.
Istisno (exception) — dastur ijrosi vaqtida yuzaga keladigan g’ayrioddiy holat. C++’da
try,throwvacatchmexanizmi bunday holatni ushlab, dasturning to’xtab qolishining oldini oladi.
try va catch tuzilishi
try blokiga xavfli kodni, catch blokiga esa xato yuz berganda bajariladigan kodni yozamiz. Xatoni throw “otadi”:
#include <iostream>
using namespace std;
int main() {
int yosh = -5;
try {
if (yosh < 0) {
throw "Yosh manfiy bo'lishi mumkin emas";
}
cout << "Yosh: " << yosh << endl;
} catch (const char* xato) {
cout << "Xato ushlandi: " << xato << endl;
}
cout << "Dastur davom etmoqda" << endl;
return 0;
}
Xato ushlandi: Yosh manfiy bo'lishi mumkin emas
Dastur davom etmoqda
throw xato “otdi”, catch uni ushladi va tushunarli xabar berdi. Eng muhimi: dastur qulamadi, oxirgi qatorgacha ishlashda davom etdi.
Turli turdagi xatolar
throw istalgan turdagi qiymatni ota oladi: matn, son yoki maxsus istisno obyekti. catch esa mos turini ushlaydi:
#include <iostream>
using namespace std;
double bolish(int a, int b) {
if (b == 0) {
throw runtime_error("Nolga bo'lish mumkin emas");
}
return (double)a / b;
}
int main() {
try {
cout << bolish(10, 2) << endl;
cout << bolish(5, 0) << endl; // bu xato beradi
} catch (runtime_error& xato) {
cout << "Xato: " << xato.what() << endl;
}
return 0;
}
5
Xato: Nolga bo'lish mumkin emas
runtime_error — standart istisno klassi. Uning what() metodi xato xabarini qaytaradi. Birinchi bo’lish muvaffaqiyatli o’tdi, ikkinchisi xato otdi va catch uni ushladi.
Bir necha catch bloki
Turli xato turlarini alohida ushlash uchun bir necha catch yozish mumkin. Ularni jadvalda ko’ramiz:
| Istisno turi | Qachon yuzaga keladi |
|---|---|
runtime_error |
ijro vaqtidagi mantiqiy xato |
out_of_range |
chegaradan chiqishda |
invalid_argument |
noto’g’ri argumentda |
... (uchta nuqta) |
har qanday xatoni ushlaydi |
Nima uchun bu muhim?
Xatolarni boshqarish katta tizimlarda hal qiluvchi ahamiyatga ega. Bitta ushlanmagan xato butun dasturni qulatishi mumkin. try-catch bu xatolarni izolyatsiya qiladi, tizimga tushunarli javob berish va tiklanish imkonini beradi. Bu — barqaror, ishonchli dastur yozishning belgisi.
Xulosa
Bu bo’limda try, throw, catch bilan xatolarni ushlash, standart istisnolar (runtime_error) va what() metodi, bir necha catch va xatolarni boshqarishning ahamiyatini ko’rib chiqdik. Xatolarni to’g’ri boshqarish — professional dasturchining belgisi.