📖 Scenario: Imagine you are creating a simple program to keep track of a book's details in a library system. Each book has a title and an author.
🎯 Goal: You will build a Ruby class called Book that uses instance variables to store the title and author of a book. Then, you will create an object of this class and display its details.
📋 What You'll Learn
Create a class named Book
Use instance variables @title and @author inside the class
Write an initialize method to set these instance variables
Create a method details that returns a string with the book's title and author
Create an object of Book with exact title 'The Ruby Way' and author 'Hal Fulton'
Print the details of the book object
💡 Why This Matters
🌍 Real World
Instance variables are used in real-world programs to store information unique to each object, like details of books, users, or products.
💼 Career
Understanding instance variables is essential for Ruby developers working on web applications, automation scripts, or any object-oriented programming tasks.
Progress0 / 4 steps
1
Create the Book class with an initialize method
Create a class called Book with an initialize method that takes two parameters: title and author. Inside the method, assign these parameters to instance variables @title and @author.
Ruby
Hint
Remember, instance variables start with @ and store data inside the object.
2
Add a method details to return book information
Inside the Book class, add a method called details that returns a string in the format: "Title: [title], Author: [author]" using the instance variables @title and @author.
Ruby
Hint
Use string interpolation with #{} to include instance variables inside the string.
3
Create a Book object with given title and author
Create a variable called my_book and assign it a new Book object with the title 'The Ruby Way' and author 'Hal Fulton'.
Ruby
Hint
Use ClassName.new(arguments) to create a new object.
4
Print the details of the my_book object
Write a puts statement to print the result of calling the details method on the my_book object.
Ruby
Hint
Use puts object.method to print the returned string.
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.