Loops

Loops#

For Loop#

The for loop in Ruby looks almost like the same loop in the Shell. The syntax looks familiar:

for variable in enumerable [do]
  statements
end

Keyword do is optional if there is a newline after enumerable, use it only for one-liners.

The enumerable is any expression which return object of class Enumerable. Enumerables are arrays, hashes, ranges, and you can even make your own enumerable object: we will describe it <%=bob_link_to_chapter ‘Enumerable Mixin’, ‘later’ %>.

for i in 1..10                              # iterations on Range
  for j in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  # and on Array
    puts "#{i} * #{j} = #{i*j}"
  end
end

http_codes = {not_found: 404, ok: 200}      # iterations on Hash
for key, value in http_codes
  puts "Code for #{key} is #{value}"
end

While Loop#

While loop is for running the block of code while some expression evaluates to true. Syntax:

while expression [do]
  statements
end

As you probably guess, keyword do is optional and must be used only when you write your loop in one line.

You can use while loop as a modifier, just like if, after the statement. This is handy if you have only one statement to repeat. Both example below will add spaces to the end of the string until its length reaches 10.

str = 'hello'
while str.length < 10     # this loop will repeat while length of the string is less than 10
  puts "Still increasing"
  str << " "              # add space at the end of the string
end

str = 'hello'
str << " " while str.length < 10  # while loop as a modifier

Until Loop#

Until statement creates the loop, which repeats while condition is false. This is a kind opposite to while loop, but the syntax is the similar:

until expression do
  statements
end

Like the other statements it is possible to use until loop as a modifier, in one line statements.

str = 'hello'
until str.length == 10     # this loop will repeat until the length of the string reaches 10
  puts "Still increasing"
  str << " "               # add space at the end of the string
end

str = 'hello'
str << " " until str.length == 10  # until loop as a modifier