Takrorlash operatori (sikl) shart rost bo’lgan ekan, kod blokini qayta-qayta bajaradi. Ruby’da bunday ikkita asosiy vosita bor: while (shart rost ekan davom etadi) va unga teskari — until (shart yolg’on ekan davom etadi).
while / until —
while shart ... end— shart rost bo’lgan ekan bloqni takrorlaydi.until shart ... end— shart yolg’on bo’lgan ekan takrorlaydi, ya’niwhile !shartbilan bir xil ma’noni bildiradi.
while sikli
while shart tekshirilib, rost bo’lsa blok bajariladi, so’ng shart yana tekshiriladi:
hisoblagich = 1
while hisoblagich <= 5
puts hisoblagich
hisoblagich += 1
end
1
2
3
4
5
Har bir aylanishda hisoblagich 1ga oshadi, 6 bo’lgach shart (<= 5) yolg’on bo’lib qoladi va sikl to’xtaydi. Sikl ichida hisoblagichni o’zgartirishni unutish — cheksiz siklga olib keladigan eng keng tarqalgan xato.
until sikli — Ruby’ga xos qulaylik
until — whilening teskarisi, ba’zi hollarda shartni salbiy shaklda yozishdan ko’ra tabiiyroq o’qiladi:
qolgan = 3
until qolgan == 0
puts "Qoldi: #{qolgan}"
qolgan -= 1
end
puts "Tugadi"
Qoldi: 3
Qoldi: 2
Qoldi: 1
Tugadi
until qolgan == 0 — qolgan nolga tenglashguncha davom etadi. Aynan shu siklni while qolgan != 0 deb ham yozish mumkin edi — ikkalasi funksional jihatdan bir xil, tanlov faqat o’qilish qulayligiga bog’liq.
Modifikator shakli
if kabi, while va until ham qator oxiriga qo’yilgan modifikator shaklida yozilishi mumkin:
son = 1
son *= 2 while son < 100
puts son
128
son *= 2 while son < 100 — son 100 dan kichik ekan, uni ikkilantiraveradi. Bu shakl ayniqsa bitta amaldan iborat qisqa sikllar uchun qulay.
loop va begin…end while
Ruby’da shartni hech bo’lmaganda bir marta bajarilishini kafolatlaydigan post-shartli sikl ham bor:
son = 10
begin
puts son
son += 1
end while son < 5
10
Oddiy whiledan farqli o’laroq, begin...end while blokini avval bajaradi, keyin shartni tekshiradi — shuning uchun shart boshidanoq yolg’on bo’lsa ham, blok kamida bir marta ishlaydi. Bu — cheksiz loop do ... end blokidan break bilan chiqishga muqobil, kamdan-kam holatlarda kerak bo’ladigan vosita.