Darsliklar Ruby For Tsikl / Each

Ruby Ruby For Tsikl / Each

For tsikl — to’plam elementlari bo’ylab yurish uchun ishlatiladigan sikl. Ruby’da klassik for mavjud, lekin amaliyotda undan ko’ra each metodi ustunlik qiladi — buning aniq texnik sababi bor.

for / eachfor x in to'plam ... end — to’plam elementlari bo’ylab yuradi. to'plam.each do |x| ... end — xuddi shu vazifani bajaradi, lekin blok o’ziga xos lokal doiraga (scope) ega.

Klassik for sikli

for sintaksisi boshqa tillarga o’xshab tanish ko’rinadi:

for son in 1..5
  puts son
end

puts son
1
2
3
4
5
5

Diqqat qiling: sikl tugagach ham son o’zgaruvchisi hali mavjud va oxirgi qiymatni (5) saqlab qolgan. Sababi — for o’z lokal doirasini yaratmaydi, son sikldan tashqarida ham ko’rinadigan bo’lib qoladi.

each — Ruby uslubidagi muqobil

each xuddi shu natijani beradi, lekin blok parametri faqat blok ichida mavjud bo’ladi:

(1..5).each do |son|
  puts son
end

puts defined?(son)
1
2
3
4
5

son bu safar faqat blok ichida yashaydi — blokdan tashqarida defined?(son) nil qaytaradi (bo’sh qator sifatida chop etiladi), chunki bunday o’zgaruvchi tashqarida umuman mavjud emas. Aynan shu — nomlar tasodifan tashqi kodga “sizib chiqmasligi” — sabab Ruby jamoasi for o’rniga eachni tavsiya qiladi.

times, upto, downto

Ma’lum sonda takrorlash uchun maxsus, o’qilishi oson metodlar bor:

3.times { |i| print i, " " }
puts

1.upto(4) { |i| print i, " " }
puts

5.downto(2) { |i| print i, " " }
puts
0 1 2 
1 2 3 4 
5 4 3 2 

times — nol(0)dan boshlab, ko’rsatilgan sonchagacha (uni qamramay) takrorlaydi. upto/downto esa boshlang’ich sondan berilgan chegaragacha mos yo’nalishda sanaydi.

step — qadam bilan yurish

Bir xil oraliqda emas, muayyan qadam bilan sanash kerak bo’lganda step ishlatiladi:

1.step(10, 3) { |son| print son, " " }
puts
1 4 7 10 

step(10, 3)1dan boshlab, har safar 3 qo’shib, 10dan oshmaguncha davom etadi. Bu, masalan, sahifalash (pagination) yoki har n-chi elementni tanlashda foydali.