Foundations
Loops
Loops repeat a small block of work for each value in a range.
each loop
`each` visits every value in a collection or range.
Loops
loops.rb
Replay: real traced execution (multi-file project)
limit = 4
total = 0
(1..limit).each do |number|
total += number
end
puts "limit=#{limit}"
puts "total=#{total}"
limit = 2
total = 0
(1..limit).each do |number|
total += number
end
puts "limit=#{limit}"
puts "total=#{total}"
limit = 6
total = 0
(1..limit).each do |number|
total += number
end
puts "limit=#{limit}"
puts "total=#{total}"
limit ← 4, total ← 0
1limit→ 4 = 4 #@limit=2, 62total→ 0 = 034(1..limit4).each do |number|5 total += number6enddo |number|
pass 1 of 44(1..limit).each do |number1|5 total0 += number16endAll 4 passes — pass 1 is the card above pass numbertotallimit1 1 0 — 2 2 1 — 3 3 3 — 4 4 6 4 puts "limit=#{limit}"
8puts "limit=#{limit4}"9puts "total=#{total10}"outputlimit=4 total=10
limit ← 2, total ← 0
1limit→ 2 = 22total→ 0 = 034(1..limit2).each do |number|5 total += number6enddo |number|
pass 1 of 24(1..limit).each do |number1|5 total0 += number16enddo |number|
pass 2 of 24(1..limit2).each do |number2|5 total1 += number26endputs "limit=#{limit}"
8puts "limit=#{limit2}"9puts "total=#{total3}"outputlimit=2 total=3
limit ← 6, total ← 0
1limit→ 6 = 62total→ 0 = 034(1..limit6).each do |number|5 total += number6enddo |number|
pass 1 of 64(1..limit).each do |number1|5 total0 += number16endAll 6 passes — pass 1 is the card above pass numbertotallimit1 1 0 — 2 2 1 — 3 3 3 — 4 4 6 — 5 5 10 — 6 6 15 6 puts "limit=#{limit}"
8puts "limit=#{limit6}"9puts "total=#{total21}"outputlimit=6 total=21
Follow the Loop
limitstarts at4.totalstarts at0.- The range
(1..limit)visits1,2,3, and4. - Each number is added to
total. - The program prints
limit=4andtotal=10. | limit | numbers added | total | | --- | --- | --- | | 2 | 1, 2 | 3 | | 4 | 1, 2, 3, 4 | 10 | | 6 | 1, 2, 3, 4, 5, 6 | 21 |
Exercise: loops.rb
Reproduce total=10 for limit 4, then try limit 2 and 6 and predict each total before running it.