O’zbekiston aloqa va axborotlashtirish agentligi


Download 0.58 Mb.
Pdf ko'rish
bet10/30
Sana05.01.2022
Hajmi0.58 Mb.
#222072
1   ...   6   7   8   9   10   11   12   13   ...   30
Bog'liq
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 :

begin

      # foydali hech narsa

      # . . . . .

      end .

    


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 :

begin

 # kod, va undagi hatoning bulishi mumkin qismi...

rescue

 # qayta tiklash...

 retry # yana bir marta takrorlash.

end

     


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:
1   ...   6   7   8   9   10   11   12   13   ...   30




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