Code Blocks and Iterators in Ruby

Code Blocks in Ruby:

It is an incredibly powerful feature. In Ruby, Code blocks briefly describe chunks of code you can associate with method invocations, almost as if they were parameters.

You can use code blocks to implement callbacks, pass around chunks of code, and implement iterators. Code blocks are just chunks of code between braces or between doing and end. It has the following syntax:

{ puts "Hello" }

This is also a code block:

do
club.enroll(person)
person.socialize
end

Code blocks are used throughout the Ruby library to implement iterators which are methods that return successive elements from some kind of collection.

Example:

animals = %w( ant bee cat dog )    # create an array
animals.each {|animal| puts animal }     # iterate over the contents

Iterators in Ruby:

In Ruby, an iterator is a simple method that can invoke a block of code. We know that a block may appear only in the source adjacent to a method call and that the code in the block is not executed at the time it is encountered.

Instead, Ruby remembers the context in which the block appears (the local variables, the current object, and so on) and then enters the method. This is where the magic starts. Within the method, the block may be invoked, almost as if it were a method itself, using the yield statement. Whenever a yield is executed, it invokes the code in the block. When the block exits, the control picks back up immediately after the yield.

Example:

def three_times
yield
yield
yield
end
three_times { puts "Hello" }

Output:

produces:
Hello
Hello
Hello

Types of Iterators in Ruby:

There are mainly seven types of iterators in Ruby.
i. Each Iterator
ii. Collect Iterator
iii. Times Iterator
iv. Upto Iterator
v. Downto Iterator
vi. Step Iterator
vii. Each Line Iterator