The initialize method is part of the object-creation process in Ruby & it allows you to set the initial values for an object.

In other programming languages they call this a “constructor”.

For example:

Let’s say that you have a Point class, this point needs two coordinates, x & y.

How are you going to pass these values into the object?

Like this:

Point.new(10, 20)

The new method is how you create new objects in Ruby from a class like Point, or any other class that you have access to.

The Relationship Between New & Initialize

Notice these two arguments, 10 & 20?

Here’s where we come back to the initialize method.

If you try to pass arguments into new & if you don’t define initialize you’re going to get an error:

ArgumentError: wrong number of arguments (2 for 0)

Because when you call new, Ruby calls initialize!

You need this:

class Point
  def initialize(x, y)
  end
end

Now you can create Point objects with two arguments.

So the whole point of initialize is to allow you to create objects with arguments.

Saving The Arguments

Arguments passed into initialize aren’t automatically saved anywhere.

You have to do this using instance variables:

class Point
  def initialize(x, y)
    @x = x
    @y = y
  end
end

This will assign the values of x & y to the instance variables (@x & @y) so you can access them later.

A few points to note about initialize:

  • You can define optional & default arguments
  • Using return inside this method doesn’t make sense because it is special & it’ll ALWAYS return a new object
  • Defining initialize is NOT necessary if your class doesn’t require arguments

You can call other methods inside initialize, but you don’t want to do any real work here beyond what’s necessary to prepare the object to be used.

For example:

If your class is all about working with the Github API, you wouldn’t want to pre-load all possible requests to the API before hand.

You just want to save the API key into an instance variable.

Or whatever data your class needs.

Initializing Hashes & Other Built-In Objects

Built-in objects like hashes have special ways to initialize & create them besides calling new.

Ways to create a hash:

h = Hash.new
h = Hash['a', 1]
h = {}

Ways to create a string:

s = String.new
s = ""
s = %Q()

Ways to create an array:

a = Array.new(5)
a = %w(a b c)
a = []

The %w creates an array of strings.

Summary

You’ve learned about the Ruby initialize method, how it’s related to the new method, and the basics of object creation in Ruby.

Keep learning by reading this intro to Object-Oriented Programming in Ruby.

Thanks for reading!