Case — bitta qiymatni bir nechta variant bilan ketma-ket solishtirish kerak bo’lganda, uzun if...elsif zanjiriga qulay alternativa. Ko’p tillardagi switchning Ruby’dagi analogi, lekin ancha kuchliroq imkoniyatlarga ega.
case / when — bitta ifodani bir nechta
whensharti bilan solishtiradigan boshqaruv tuzilmasi. Solishtirish ichki tomondan===operatori orqali amalga oshiriladi, shu sababwhenga son, oraliq (Range) yoki klass ham berilishi mumkin.
Asosiy case…when
Qiymat navbat bilan har bir when bilan solishtiriladi, mos kelgani bajariladi:
kun = "seshanba"
case kun
when "dushanba"
puts "Hafta boshi"
when "seshanba", "chorshanba", "payshanba"
puts "Hafta o'rtasi"
when "juma"
puts "Ish haftasi oxiri"
else
puts "Dam olish kuni"
end
Hafta o'rtasi
Bitta when qatoriga vergul bilan bir nechta qiymat yozish mumkin — ular “yoki” mantig’ida ishlaydi. else — hech biriga mos kelmasa ishga tushadigan yakuniy shoxobcha.
Range bilan case
whenga Range berilsa, qiymat oraliqqa kiradimi tekshiriladi — bu ko’plab oraliq shartlarni yozishning eng toza usuli:
baho = 82
natija = case baho
when 90..100 then "A'lo"
when 70...90 then "Yaxshi"
when 50...70 then "Qoniqarli"
else "Qoniqarsiz"
end
puts natija
Yaxshi
Bu yerda case natijasi to’g’ridan-to’g’ri natija o’zgaruvchisiga o’zlashtirildi — Ruby’da case ham, if kabi, o’zi bir qiymat qaytaradigan ifoda hisoblanadi. then — bir qatorli when shartida blokni ochish uchun ishlatiladi.
Klass bilan case
whenga klass nomi berilsa, qiymat o’sha klassga tegishli ekanligi tekshiriladi:
[42, "matn", 3.14, true].each do |qiymat|
case qiymat
when Integer then puts "#{qiymat} — butun son"
when String then puts "#{qiymat} — satr"
when Float then puts "#{qiymat} — kasr son"
else puts "#{qiymat} — boshqa tur"
end
end
42 — butun son
matn — satr
3.14 — kasr son
true — boshqa tur
Bu ishlashi sababi — Integer === 42 chaqiruvi qiymat aynan shu klassning nusxasi ekanligini tekshiradi. Xuddi shu mexanizm oldingi darsdagi Range misolida ham ishladi: (90..100) === baho.
when’siz case
Ba’zan case shartsiz, faqat ketma-ket mantiqiy ifodalarni tekshirish uchun ham ishlatiladi:
harorat = 5
holat = case
when harorat < 0 then "muzlash"
when harorat < 15 then "sovuq"
when harorat < 25 then "salqin"
else "issiq"
end
puts holat
sovuq
Bu shaklda case ifodasiz yoziladi, har bir when esa o’zi mustaqil shart bo’ladi — natijada uzun if...elsif zanjiriga tartibli muqobil hosil bo’ladi.