Instance variables store information unique to each object. They keep data safe inside the object.
When you want each object to remember its own details, like a person's name or age.
When you need to keep track of an object's state across different methods.
When you want to avoid sharing data between different objects of the same class.
When you want to organize data inside an object clearly and safely.
Syntax
Ruby
@variable_name = value
Instance variables always start with the @ symbol.
They belong to the object, not the class itself.
Examples
This sets an instance variable @name when creating a new Person.
Ruby
class Person
definitialize(name)
@name = name
endend
This method stores the age in an instance variable @age.
Ruby
def set_age(age)
@age = age
end
This method returns the value stored in the instance variable @name.
Ruby
def get_name
@name
end
Sample Program
This program creates a Dog object with a name and breed stored in instance variables. Then it prints the dog's details.
Ruby
class Dog
definitialize(name, breed)
@name = name
@breed = breed
enddef info
"Dog's name is #{@name} and breed is #{@breed}."endend
my_dog = Dog.new("Buddy", "Golden Retriever")
puts my_dog.info
OutputSuccess
Important Notes
Instance variables are private to the object. You cannot access them directly from outside without methods.
Each object has its own copy of instance variables, so changing one object's variable does not affect others.
Summary
Instance variables store data unique to each object.
They always start with @.
Use methods to read or change instance variables safely.
Practice
(1/5)
1. What does an instance variable in Ruby always start with?
easy
A. An at symbol (@)
B. A dollar sign ($)
C. A hash symbol (#)
D. A percent sign (%)
Solution
Step 1: Recall Ruby instance variable syntax
Instance variables in Ruby always begin with the at symbol (@) to distinguish them from local variables.
Step 2: Identify the correct symbol
Among the options, only the at symbol (@) is used to start instance variables.
Final Answer:
An at symbol (@) -> Option A
Quick Check:
Instance variable starts with @ [OK]
Hint: Instance variables always start with @ in Ruby [OK]
Common Mistakes:
Confusing instance variables with global variables ($)
Using local variable syntax without @
Thinking instance variables start with # or %
2. Which of the following is the correct way to define an instance variable inside a Ruby class?
In Ruby, instance variables are assigned by writing @variable_name = value inside methods or constructors.
Step 2: Check each option
@name = 'Alice' correctly assigns an instance variable. The other options use invalid syntax.
Final Answer:
@name = 'Alice' -> Option B
Quick Check:
Assign instance variable with @name = value [OK]
Hint: Assign instance variables with @name = value inside methods [OK]
Common Mistakes:
Adding var keyword (not used in Ruby)
Placing @ inside quotes
Using def keyword incorrectly
3. What will be the output of this Ruby code?
class Person
def initialize(name)
@name = name
end
def greet
"Hello, #{@name}!"
end
end
p = Person.new('Bob')
puts p.greet
medium
A. Error: undefined variable
B. Hello, @name!
C. Hello, name!
D. Hello, Bob!
Solution
Step 1: Understand instance variable assignment in initialize
The initialize method sets @name to 'Bob' when Person.new('Bob') is called.
Step 2: Evaluate greet method output
The greet method returns a string with #{@name} replaced by the instance variable value 'Bob'.
Final Answer:
Hello, Bob! -> Option D
Quick Check:
Instance variable @name holds 'Bob' so output is Hello, Bob! [OK]
Hint: Instance variables keep data per object, used inside methods with @ [OK]
Common Mistakes:
Expecting literal '@name' in output
Confusing local and instance variables
Forgetting to use @ in string interpolation
4. Identify the error in this Ruby class code:
class Car
def initialize(model)
name = model
end
def show
puts @name
end
end
car = Car.new('Tesla')
car.show
medium
A. Syntax error in initialize method
B. Method show is missing return statement
C. Instance variable @name is not assigned, so nil is printed
D. Cannot call puts inside method
Solution
Step 1: Check variable assignment in initialize
The code assigns local variable name = model, not instance variable @name.
Step 2: Understand effect on show method
Since @name is never set, @name is nil, so puts prints an empty line (nil).
Final Answer:
Instance variable @name is not assigned, so nil is printed -> Option C
Quick Check:
Local variable assigned, not instance variable @name [OK]
Hint: Use @ to assign instance variables, not plain variable names [OK]
Common Mistakes:
Assigning local variable instead of instance variable
Expecting puts to fail without return
Thinking syntax error occurs here
5. You want to create a Ruby class Book that stores a title and author as instance variables. You also want a method description that returns "Title by Author". Which code correctly implements this?
hard
A. class Book
def initialize(title, author)
@title = title
@author = author
end
def description
"#{@title} by #{@author}"
end
end
B. class Book
def initialize(title, author)
title = @title
author = @author
end
def description
"#{title} by #{author}"
end
end
C. class Book
def initialize(title, author)
@title = title
@author = author
end
def description
"title by author"
end
end
D. class Book
def initialize(title, author)
@title = title
@author = author
end
def description
"#{title} by #{author}"
end
end
Solution
Step 1: Assign instance variables correctly in initialize
class Book
def initialize(title, author)
@title = title
@author = author
end
def description
"#{@title} by #{@author}"
end
end assigns @title and @author from parameters correctly. class Book
def initialize(title, author)
title = @title
author = @author
end
def description
"#{title} by #{author}"
end
end reverses assignment. The remaining options misuse variables in description.
Step 2: Use instance variables in description method
class Book
def initialize(title, author)
@title = title
@author = author
end
def description
"#{@title} by #{@author}"
end
end uses #{@title} and #{@author} inside string interpolation, correctly accessing instance variables.
Final Answer:
class Book
def initialize(title, author)
@title = title
@author = author
end
def description
"#{@title} by #{@author}"
end
end -> Option A
Quick Check:
Assign and use @variables inside methods for correct output [OK]
Hint: Assign and use instance variables with @ inside all methods [OK]
Common Mistakes:
Assigning variables backwards (param = @var)
Using local variables instead of instance variables in methods
Returning literal strings without interpolation
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.