Break va Next — sikl oqimini boshqarish uchun ishlatiladigan ikkita kalit so’z. break siklni butunlay to’xtatadi, next esa faqat joriy aylanishni o’tkazib, keyingisiga o’tadi.
break / next —
break— siklni darhol tugatadi va undan chiqadi.next— joriy iteratsiyaning qolgan qismini o’tkazib, keyingi elementga o’tadi. Ikkalasi hameach,for,whileva boshqa har qanday sikl turida ishlaydi.
break — siklni to’xtatish
Kerakli element topilgach, qolgan elementlarni tekshirishning hojati bo’lmasa, break sikldan darhol chiqadi:
sonlar = [4, 9, 15, 22, 30]
sonlar.each do |son|
break if son > 15
puts son
end
4
9
15
22 ga yetganda shart (son > 15) rost bo’ldi va break ishga tushib, sikl to’xtadi — 22 va 30 hech qachon chop etilmadi. Katta to’plamlarda kerakli narsa topilgach qidiruvni to’xtatish sezilarli tezlik beradi.
next — joriy aylanishni o’tkazib yuborish
next faqat joriy elementni o’tkazib, siklni davom ettiradi — breakdan farqli, sikl butunlay to’xtamaydi:
(1..10).each do |son|
next if son.odd?
puts son
end
2
4
6
8
10
Har bir toq son uchun next ishga tushadi va o’sha aylanishning qolgan kodi (puts son) bajarilmay, keyingi songa o’tiladi. Natijada faqat juft sonlar chop etiladi.
break qiymat bilan
Ruby’ning o’ziga xos xususiyati — break orqali sikldan qiymat bilan chiqish mumkin, va bu qiymat butun each chaqiruvining natijasiga aylanadi:
sonlar = [3, 7, 12, 18, 25]
natija = sonlar.each do |son|
break son if son > 10
end
puts natija
12
Odatda each o’zi chaqirilgan massivni qaytaradi, lekin break son ishlagach, butun ifodaning natijasi aynan o’sha son (12) bo’lib qoladi. Bu naqsh to’plamdan birinchi mos elementni qidirishda ixcham yechim beradi.
next qiymat bilan — map ichida filtrlash
next ham qiymat qaytarishi mumkin — bu ayniqsa map kabi natija yig’uvchi metodlarda foydali:
natijalar = [1, 2, 3, 4, 5].map do |son|
next 0 if son.even?
son * 10
end
puts natijalar.inspect
[10, 0, 30, 0, 50]
Juft sonlar uchun next 0 ishga tushib, blokning natijasi 0 bo’ladi; toq sonlar uchun esa son * 10 hisoblanadi. map har bir aylanishning natijasini yangi massivga yig’adi.