Ruby Loops


Loops in Ruby are used to execute the same block of code a specified number of times. This chapter details all the loop statements supported by Ruby.

 

Ruby while Statement:

Executes code while conditional is true. A while loop's conditional is separated from code by the reserved word do, a newline, backslash \, or a semicolon ;.

      i = 0;
      num = 5;
      
      while i < num  do
         puts("Inside the loop i = #{i}" );
         i +=1;
      end
      

This will produce following result:

      Inside the loop i = 0
      Inside the loop i = 1
      Inside the loop i = 2
      Inside the loop i = 3
      Inside the loop i = 4
      

 

Ruby while modifier:

Executes code while conditional is true.

If a while modifier follows a begin statement with no rescue or ensure clauses, code is executed once before conditional is evaluated.

      i = 0;
      num = 5;
      begin
         puts("Inside the loop i = #{i}" );
         i +=1;
      end while i < num
      

This will produce following result:

      Inside the loop i = 0
      Inside the loop i = 1
      Inside the loop i = 2
      Inside the loop i = 3
      Inside the loop i = 4
      

 

Ruby until Statement:

Executes code while conditional is false. An until statement's conditional is separated from code by the reserved word do, a newline, or a semicolon.

      i = 0;
      num = 5;
      
      until i > num  do
         puts("Inside the loop i = #{i}" );
         i +=1;
      end
      

This will produce following result:

      Inside the loop i = 0
      Inside the loop i = 1
      Inside the loop i = 2
      Inside the loop i = 3
      Inside the loop i = 4
      Inside the loop i = 5
      

 

Ruby until modifier:

Executes code while conditional is false.

If an until modifier follows a begin statement with no rescue or ensure clauses, code is executed once before conditional is evaluated.

      i = 0;
      num = 5;
      begin
         puts("Inside the loop i = #{i}" );
         i +=1;
      end until i > num
      

This will produce following result:

      Inside the loop i = 0
      Inside the loop i = 1
      Inside the loop i = 2
      Inside the loop i = 3
      Inside the loop i = 4
      Inside the loop i = 5
      

 

Ruby for Statement:

Executes code once for each element in expression.

      for i in 0..5
         puts "Value of local variable is #{i}"
      end
      

Here we have defined the range 0..5. The statement for i in 0..5 will allow i to take values in the range from 0 to 5 (including 5).This will produce following result:

      Value of local variable is 0
      Value of local variable is 1
      Value of local variable is 2
      Value of local variable is 3
      Value of local variable is 4
      Value of local variable is 5
      

A for...in loop is almost exactly equivalent to:

      (expression).each do |variable[, variable...]| code end
      

except that a for loop doesn't create a new scope for local variables. A for loop's expression is separated from code by the reserved word do, a newline, or a semicolon.

      (0..5).each do |i|
         puts "Value of local variable is #{i}"
      end
      

This will produce following result:

      Value of local variable is 0
      Value of local variable is 1
      Value of local variable is 2
      Value of local variable is 3
      Value of local variable is 4
      Value of local variable is 5
      

 

Ruby break Statement:

Terminates the most internal loop. Terminates a method with an associated block if called within the block (with the method returning nil).

      for i in 0..5
         if i > 2 then
            break
         end
         puts "Value of local variable is #{i}"
      end
      

This will produce following result:

      Value of local variable is 0
      Value of local variable is 1
      Value of local variable is 2
      

 

Ruby next Statement:

Jumps to next iteration of the most internal loop. Terminates execution of a block if called within a block (with yield or call returning nil).

Example:

      for i in 0..5
         if i < 2 then
            next
         end
         puts "Value of local variable is #{i}"
      end
      

This will produce following result:

      Value of local variable is 2
      Value of local variable is 3
      Value of local variable is 4
      Value of local variable is 5
      

 

Ruby redo Statement:

Restarts this iteration of the most internal loop, without checking loop condition. Restarts yield or call if called within a block.

      limit = 851
      (223..1000000).each do |num|
        if num.to_i % 2 == 0
          num = 1.541645637 * num
          puts num
          break if num > limit
          redo
        end
      end
      

This will produce following result:

      345.328622688
      348.411913962
      537.127707038337
      351.495205236
      354.57849651
      546.634392118661
      842.716525643881
      1299.17025498669
      

 

Ruby retry Statement:

If retry appears in rescue clause of begin expression, restart from the beginning of the 1begin body.

      begin
         do_something # exception raised
      rescue
         # handles error
         retry  # restart from beginning
      end
      

If retry appears in the iterator, the block, or the body of the for expression, restarts the invocation of the iterator call. Arguments to the iterator is re-evaluated.

      for i in 1..5
         retry if  i > 2
         puts "Value of local variable is #{i}"
      end
      

This will produce following result and will go in an infinite loop:

      Value of local variable is 1
      Value of local variable is 2
      Value of local variable is 1
      Value of local variable is 2
      Value of local variable is 1
      Value of local variable is 2
      ............................