Shart operatori dastur bajarilish yo’nalishini shartga qarab tanlash imkonini beradi. Ruby’da bu if, elsif, else va unless kalit so’zlari orqali amalga oshiriladi, blok esa har doim end bilan yopiladi.
if / elsif / else / unless — shart rost (
true) yoki yolg’on (false,nil) ekaniga qarab kod blokini tanlab bajaruvchi boshqaruv tuzilmasi.
Asosiy if…elsif…else
Bir nechta shartni ketma-ket tekshirish uchun elsif ishlatiladi (diqqat: else if emas, aynan elsif):
baho = 75
if baho >= 90
puts "A'lo"
elsif baho >= 70
puts "Yaxshi"
elsif baho >= 50
puts "Qoniqarli"
else
puts "Qoniqarsiz"
end
Yaxshi
Shartlar yuqoridan pastga tekshiriladi, birinchi rost topilgan shart bajariladi va qolganlari o’tkazib yuboriladi. else — hech biri to’g’ri kelmasa ishlaydigan yakuniy holat.
unless — teskari shart
unless — if not ma’nosini beradi, shart yolg’on bo’lgandagina blok bajariladi:
yosh = 15
unless yosh >= 18
puts "Kirish taqiqlangan"
else
puts "Kirish ruxsat etilgan"
end
Kirish taqiqlangan
unless yosh >= 18 — if !(yosh >= 18) bilan bir xil ma’noni bildiradi. unless faqat shartni “manfiy” shaklda tabiiyroq o’qish kerak bo’lgan holatlarda ishlatiladi; murakkab shartlarda esa if bilan ! dan foydalanish o’qilishi osonroq bo’ladi.
Modifikator shakli
Bitta amalni bajarish uchun bitta shart yetarli bo’lganda, if/unless ni qator oxiriga qo’yish mumkin — bu Ruby uslubining eng ixcham shakli:
narx = 150000
puts "Chegirma bor" if narx > 100000
puts "Yetkazib berish tekin" unless narx < 50000
Chegirma bor
Yetkazib berish tekin
Bu shakl to’liq bloklardan qisqaroq, lekin faqat bitta ifoda uchun mos — bir necha amal yoki elsif zanjiri kerak bo’lsa, to’liq if...end blokiga qaytish kerak.
Shartlarni birlashtirish
&& va || orqali bir nechta shartni bitta if ichida birlashtirish mumkin:
yosh = 26
hujjat_bor = true
if yosh >= 18 && hujjat_bor
puts "Shartnoma tuzish mumkin"
end
Shartnoma tuzish mumkin
Bu operatorlar oldingi darsda batafsil ko’rilgan edi — shart ichida ular xuddi shu mantiq bilan ishlaydi: && ikkala tomon ham rost bo’lishini talab qiladi.