Instance methods in Ruby - Time & Space Complexity
When we use instance methods in Ruby, we want to know how long they take to run as the input changes.
We ask: How does the time to run an instance method grow when the data it works on gets bigger?
Analyze the time complexity of the following code snippet.
class Box
def initialize(items)
@items = items
end
def count_items
@items.length
end
end
box = Box.new([1, 2, 3, 4, 5])
puts box.count_items
This code defines a class with an instance method that returns the number of items stored inside.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Accessing the length of the array stored in the instance variable.
- How many times: The length method runs once per call to
count_items.
Explain the growth pattern intuitively.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 1 |
| 100 | 1 |
| 1000 | 1 |
Pattern observation: The time to get the length stays the same no matter how many items there are.
Time Complexity: O(1)
This means the method runs in constant time, taking the same amount of time regardless of input size.
[X] Wrong: "Calling length on an array inside an instance method takes longer as the array grows."
[OK] Correct: Ruby arrays store their length, so getting it is quick and does not depend on the number of items.
Understanding how instance methods work with data size helps you explain your code clearly and think about efficiency in real projects.
"What if the instance method iterated over all items to sum them? How would the time complexity change?"
Practice
What is an instance method in Ruby?
Solution
Step 1: Understand what instance methods are
Instance methods are defined inside a class and belong to objects created from that class.Step 2: Differentiate from class methods
Class methods belong to the class itself, not to individual objects.Final Answer:
A method that belongs to an object created from a class -> Option AQuick Check:
Instance method = belongs to object [OK]
- Confusing instance methods with class methods
- Thinking instance methods run only once
- Believing instance methods cannot be called on objects
Which of the following is the correct way to define an instance method greet inside a Ruby class Person?
class Person ? end
Solution
Step 1: Identify instance method syntax
Instance methods are defined withdef method_nameinside the class withoutself..Step 2: Check options
def greet; puts 'Hello'; end uses correct syntax. def self.greet; puts 'Hello'; end and def Person.greet; puts 'Hello'; end define class methods. def greet() puts 'Hello' end misses semicolons or line breaks, causing syntax issues.Final Answer:
def greet; puts 'Hello'; end -> Option BQuick Check:
Instance method = def method_name [OK]
- Using self. which defines class methods
- Omitting semicolons or line breaks incorrectly
- Defining methods outside the class
What will be the output of the following Ruby code?
class Dog
def bark
'Woof!'
end
end
fido = Dog.new
puts fido.barkSolution
Step 1: Understand the class and method
The class Dog has an instance method bark that returns the string 'Woof!'.Step 2: Trace the method call
An object fido is created from Dog, then fido.bark calls the bark method, returning 'Woof!'.Final Answer:
Woof! -> Option CQuick Check:
Calling instance method returns 'Woof!' [OK]
- Expecting method name instead of return value
- Confusing class name with output
- Thinking method is undefined
Find the error in this Ruby code and select the fix that will make it work:
class Cat
def meow
puts 'Meow!'
end
end
kitty = Cat.new
kitty.meow()Solution
Step 1: Check method definition and call
The method meow is defined correctly as an instance method and called on an object.Step 2: Verify syntax and usage
Using parentheses in method call is allowed in Ruby, sokitty.meow()is valid.Final Answer:
No error; code works as is -> Option DQuick Check:
Parentheses optional in method calls [OK]
- Thinking parentheses cause errors
- Confusing instance and class methods
- Adding unnecessary return before puts
Given the class below, what will puts user.full_name print?
class User
def initialize(first, last)
@first_name = first
@last_name = last
end
def full_name
"#{@first_name} #{@last_name}".upcase
end
end
user = User.new('Jane', 'Doe')Solution
Step 1: Understand instance variables and method
The initialize method sets @first_name and @last_name. The full_name method returns their combination in uppercase.Step 2: Trace the method call
Calling user.full_name returns "JANE DOE" because of theupcasemethod.Final Answer:
JANE DOE -> Option AQuick Check:
full_name returns uppercase full name [OK]
- Ignoring upcase method effect
- Expecting original case output
- Confusing string quotes in output
Ready to prove it?
Pass the test and this pattern moves unknown
