Dart tiliga kirish O'zgaruvchilar va konstantalar Primitiv ma'lumotlar turlari


Download 374.15 Kb.
bet29/35
Sana11.05.2023
Hajmi374.15 Kb.
#1454719
1   ...   25   26   27   28   29   30   31   32   ...   35
Bog'liq
3-mustaqil ish

6-bob. Istisnolarni ko'rib chiqish

Блок try..catch

Dasturni ishga tushirish jarayonida dasturning odatiy jarayonini buzadigan va hatto uning bajarilishini to'xtatishga majbur qiladigan turli xil xatolar yuzaga kelishi mumkin. Bunday xatolar istisnolar deb ataladi. Dart tili, ko'plab dasturlash tillari kabi, istisnolardan foydalanishni qo'llab-quvvatlaydi, bu bizga dasturni buzmaslikka imkon beradi.


Keling, eng oddiy vaziyatni ko'rib chiqaylik:



1
2
3
4
5
6
7
8

void main (){
int x = 9;
int y = 0;
int z = x ~/ y;
print(z);
}

Bunday holda, 0 ga butun son bo'linishi (~ / operatsiyasi) mavjud. Natijada, dastur istisno hosil qiladi va uning bajarilishini to'xtatadi. Vaziyat sun'iy bo'lib tuyulishi mumkin, chunki bu erda biz o'zgaruvchilardan biri 0 ga teng ekanligini aniq ko'ramiz va tabiiyki, dastur xato bilan tugaydi. Biroq, aslida, biz tashqi manbadan ma'lumotlarni qabul qilishimiz mumkin va 0 yoki 0 emasligini aniq bilmaymiz. Bundan tashqari, Dartdagi istisnolar nolga bo'linish bilan cheklanmaydi, bunday favqulodda to'xtash holatlari ko'p. dasturning ishlashi mumkin.


Dart bizga bunday vaziyatlarni hal qilish uchun nimani taklif qiladi? Birinchidan, bu sinash ... bo'yicha ... qo'lga olish ... nihoyat qurilish:




1
2
3
4
5
6
7
8
9
10
11
12

try{
// Код, который может привести к генерации исключения
}
on Тип_Исключения{
// Обработка возникшего исключения
}
catch (e){
// Обработка возникшего исключения
}
finally{
//
}

try..on..catch..finally blokidan foydalanilganda, birinchi navbatda try blokidagi barcha operatorlar bajariladi. Agar ushbu blokda istisnolar o'rnatilmagan bo'lsa, u bajarilgandan so'ng final bloki bajarila boshlaydi. Keyin try..on..catch..nihoyat konstruksiya oʻz ishini yakunlaydi.


Agar sinash blokida to'satdan istisno ro'y bersa, u holda oddiy bajarish tartibi to'xtaydi, keyin dasturning bajarilishi ko'tarilgan istisnoni hal qila oladigan on yoki catch blokiga o'tadi. Agar kerakli blok yoki catch bloki topilsa, u bajariladi va u tugagach, yakuniy blok bajariladi.


On va catch iboralarining farqi shundaki, on tutqichlar ma'lum turdagi istisno (on bayonoti keyingi mavzuda batafsilroq muhokama qilinadi). Va catch barcha istisnolarni boshqaradi.

Agar blok yoki catch blokida talab qilinadigan blok topilmasa, istisno sodir bo'lganda, finally bloki yana bajariladi va dastur o'z bajarilishini g'ayritabiiy tarzda tugatadi.

Keling, try..on..catch..nihoyat, 0 ga boʻlinish jarayonidan foydalanamiz:




1
2
3
4
5
6
7
8
9
10
11
12
13
14

void main (){
try{
int x = 9;
int y = 0;
int z = x ~/ y;
print(z);
}
catch(e){
print("Возникло исключение $e");
}
print("Завершение программы");
}

Bu erda istisnoga olib kelishi mumkin bo'lgan kod sinash blokiga joylashtirilgan. Qavs ichidagi catch bloki istisno qilinganda uzatiladigan parametrlar ro'yxatini o'z ichiga oladi. Bunday holda, bu bitta parametr - (e), bu istisno haqidagi ma'lumotni ifodalaydi.


Va ushbu dasturni bajarishda biz quyidagi konsol natijasini olamiz:

Возникло исключение IntegerDivisionByZeroException
Завершение программы

Bu erda biz istisno qilinganiga qaramay, dastur g'ayritabiiy tarzda tugamaganini va catch bloki bajarilgandan so'ng u o'z ishini davom ettirganini ko'ramiz.


Dizaynni belgilashda, agar kerak bo'lmasa, biz bir qator bloklarni o'tkazib yuborishimiz mumkin. Faqat try bloki talab qilinadi. Biroq, hech bo'lmaganda, u bilan birga yoqish va / yoki catch bloki yoki finally bloki ham ishlatilishi kerak. Shunday qilib, yuqoridagi misolda faqat try and catch bloklari ishlatilgan. Nihoyat blokni qo'shamiz:




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

void main (){
try{
int x = 9;
int y = 0;
int z = x ~/ y;
print(z);
}
catch(e){
print("Возникло исключение $e");
}
finally{
print("Выполнение блока finally");
}
print("Завершение программы");
}

Konsol chiqishi:

Возникло исключение IntegerDivisionByZeroException
Выполнение блока finally
Завершение программы

Bunday holda, biz catch blokini o'tkazib yuborishimiz mumkin:




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

void main (){
try{
int x = 9;
int y = 0;
int z = x ~/ y;
print(z);
}
finally{
print("Выполнение блока finally");
}
print("Завершение программы");
}

Sinov blokiga istisno kiritilgandan so'ng, finally bloki bajariladi, shundan so'ng dastur g'ayritabiiy tarzda to'xtaydi.


Blok parametrlarini ushlang


Qabul qilish blokiga bir qator parametrlar uzatiladi, ular istisno haqida ma'lumot beradi va biz, agar kerak bo'lsa, ushbu ma'lumotlarni olishimiz va foydalanishimiz mumkin:


1
2
3
4
5
6
7
8
9
10
11

try{
int x = 9;
int y = 0;
int z = x ~/ y;
print(z);
}
catch(e, s){
print("Обработка исключения $e");
print("Стек $s");
}

Catch blokining birinchi parametri e, istisno ob'ektini, ikkinchisi, s, istisnolar stekini ifodalaydi, bu istisno qayerda sodir bo'lganligini tushunishga imkon beradi.



Download 374.15 Kb.

Do'stlaringiz bilan baham:
1   ...   25   26   27   28   29   30   31   32   ...   35




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling