Ruby for Keyword
last modified April 27, 2025
This tutorial explains how to use Ruby's for
keyword for iteration.
The for
loop provides a clean syntax for traversing collections.
The for keyword creates a loop that iterates over a collection. It automatically assigns each element to a loop variable. The loop runs until all elements are processed.
While Rubyists often prefer each
, for
remains useful
for certain scenarios. It's more familiar to developers from other languages.
The loop variable remains in scope after the loop.
Basic for Loop with Range
This simple example demonstrates iterating over a numeric range. The loop variable takes each value in sequence.
for i in 1..5 puts "Current number: #{i}" end puts "Final value: #{i}"
The loop runs from 1 to 5 inclusive. Notice the variable i
remains
accessible after the loop. This differs from block-scoped iterators.
Iterating Over an Array
Arrays work naturally with for
loops. Each element becomes
available through the loop variable in turn.
fruits = ["apple", "banana", "cherry"] for fruit in fruits puts "Fruit: #{fruit.capitalize}" end puts "Last fruit: #{fruit}"
The loop processes each array element sequentially. The variable fruit
holds each value. Again, it persists after the loop completes.
Nested for Loops
for
loops can be nested to handle multi-dimensional data. Each
level gets its own loop variable.
matrix = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] for row in matrix for cell in row print "#{cell} " end puts end
The outer loop handles each row, while the inner loop processes individual cells. This pattern works for any nested enumerable structure.
for with Hash
Hashes require special handling since they contain key-value pairs. The loop variable becomes an array of both elements.
person = {name: "John", age: 30, city: "New York"} for key, value in person puts "#{key}: #{value}" end
The loop unpacks each key-value pair into separate variables. Without both variables, you'd get two-element arrays instead.
Modifying Elements During Iteration
for
loops allow modifying collection elements during iteration.
Changes affect the original collection.
numbers = [1, 2, 3, 4, 5] for num in numbers num *= 2 end puts numbers.inspect
This example attempts to double each number. However, the original array
remains unchanged because num
is a copy. Use map!
for in-place modification.
Break and Next in for Loops
Control flow keywords work similarly in for
as in other loops.
break
exits entirely, while next
skips ahead.
for i in 1..10 next if i % 2 == 0 break if i > 7 puts "Odd number: #{i}" end
The loop skips even numbers with next
and stops completely after
7 with break
. These keywords provide precise flow control.
for vs each
This example contrasts for
with Ruby's preferred each
iterator. The main differences involve variable scope and return values.
# for loop version for x in [1, 2, 3] puts x end puts "x after for: #{x}" # each version [1, 2, 3].each do |y| puts y end puts "y after each: #{y}" rescue puts "y undefined"
The for
variable persists, while each
's block
variable doesn't. Also, for
returns the original collection.
Source
This tutorial covered Ruby's for
keyword with examples showing
range iteration, array processing, nested loops, and control flow.
Author
List all Ruby tutorials.