O’zbekiston aloqa va axborotlashtirish agentligi
Download 0.58 Mb. Pdf ko'rish
|
ruby dasturlash tili asoslari
3.1.2 Istisnolarni qayta
ishlash Xuddi boshqa tillar kabi Ruby ham istisnolarni qo’llab quvatlaydi. Istisno – bu xatolarga ishlov berish mexanizmi bo’lib, avvali qulayliklardan afzalligi bilan ajralib turadi. Bizga xatolar kodini takrorlanishidan va ularning analizidagi chalkashib ketgan mantiqidan qutulishiga erishdik ; xatoni aniqlangan kod unga ishlov bergan koddan ajralib turadi. Raise istisno xosil qiladi. Eslatib o’tamiz raise – bu zaxiradagi so’z emas, kernel moduli uslubidir. 25 Raise # Misol Raise “xato bo’ldi” # Misol 2 raise ArgumentError,”boshqa son”# Misol 3 Rraise ArgumentError.new “notug’ri ma’lumotlar ” # Misol 4 nm raise ArgumentError, " notug’ri ma’lumotlar ", caller[0] # Misol 5 Birinchi misolda oxirgi uchragan istisno qayta paydo bo’ladi. 2 – misolda Runtime istisnosi qaratiladi, qaysiki, “xato bo’ldi” xabari jo’natilgan 3 misolda tip istisnosi Argumentdan Eror harakatga keltiriladi. 4 misolda esa xuddi shunaqa istisno bo’lib, lekin “noto’g’ri ma’lumotlar” xabari keladi. 5 misol – shunchaki 4 misolning boshqacha yozilishi. Va oxirgi 6- misolda yo’naltirilgan ma’lumot “file name : line” yoki “file name : line : in I metod” ko’rinishida qo’shiladi. Rubyda istisnoga qanday ishlov beriladi ? Bu maqsad uchun begin – end bloki xizmat qiladi. Sodda qilib aytganda uning ichida hech narsa yo’q, koddan tashqari :
Shunchaki xatolarni topadi. Lekin blokning bir nechta ishlovchi mutaxasislari bo’ladi. Rescue . Agar dasturda begin va rescue orasida biror xato bo’lsa boshqaruv darxol mos keluvchi biror 1 ishlov beruvchiga beriladi rescue :
begin x = Math.sqrt(y/z) # ... rescue ArgumentError puts "kvadrat ildizda hato." 26 rescue ZeroDivisionError puts "nolga bulish buldi" end
begin x = Math.sqrt(y/z) # ... rescue => err puts err end
Bu yerda o’zgaruvchi errda ob’ekt – istisno saqlanadi uni bosmaga chiqarishdan oldin, ob’ekt mantiqiy ramzlar qatorida qayta shakl beriladi. Eslatamiz, tip xatosi berilmaganda, bu rescue ishlov beruvchisi hamma istisnolarni ushlab qoladi, Standart Error sinfida ishlab chiqarligan, Rescue konstruksiyasida => variable, => ramzi oldidan qushimcha tip xatosini aniqlash mumkin. Agar tip xatosi berilgan bo’lsa, haqiqiy paydo bo’lgan tip istisnosi ularning hech biri bilan to’g’ri kelmasligi mumkin. Bunday hollarda hamma ishlov beruvchilarning rescue dan keyin else ni joylashtirishga ruxsat beriladi. begin # yozilga kod va unda uchraydigan error... rescue Type1 # ...
rescue Type2 # ...
else #Прочие исключения... end
27
Biz ko’pincha xatolarning keyin tez tiklanishini xohlaymiz. Bunday xollarda bizga kalit so’z retry yordam beradi. U bizga begin blokka qayta kirishga va operasiyasini yana 1 marta amalga oshirishga yordam beradi :
Va nixoyat, ba’zida begin – end bloki amalida keyin “tozalaydi” kodi zarurdir. Bunday vaziyatda ensure qismini qo’yish mumkin : Download 0.58 Mb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling