Bird
Raised Fist0
Rubyprogramming~5 mins

Instance variables (@) in Ruby - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Instance variables (@)
O(n)
Understanding Time Complexity

Let's see how using instance variables affects the time it takes for a program to run.

We want to know if accessing or setting instance variables changes how long the program takes as it runs.

Scenario Under Consideration

Analyze the time complexity of the following code snippet.

class Person
  def initialize(name)
    @name = name
  end

  def greet
    "Hello, #{@name}!"
  end
end

person = Person.new("Alice")
puts person.greet

This code creates a person with a name stored in an instance variable and then greets using that name.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: Accessing the instance variable @name inside the greet method.
  • How many times: Each time greet is called, the instance variable is accessed once.
How Execution Grows With Input

Explain the growth pattern intuitively.

Input Size (n)Approx. Operations
1010 accesses to @name if greet called 10 times
100100 accesses to @name if greet called 100 times
10001000 accesses to @name if greet called 1000 times

Pattern observation: The time grows directly with how many times you call the method that uses the instance variable.

Final Time Complexity

Time Complexity: O(n)

This means the time to run grows in a straight line with the number of times you call the method that accesses the instance variable.

Common Mistake

[X] Wrong: "Accessing an instance variable is slow and adds extra loops behind the scenes."

[OK] Correct: Accessing an instance variable is a simple, direct operation that takes the same time each time, not a loop or repeated search.

Interview Connect

Understanding how instance variables work helps you explain how your code stores and accesses data efficiently, a key skill in programming.

Self-Check

"What if we changed the instance variable to a class variable? How would the time complexity change when accessing it multiple times?"

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

  1. Step 1: Recall Ruby instance variable syntax

    Instance variables in Ruby always begin with the at symbol (@) to distinguish them from local variables.
  2. Step 2: Identify the correct symbol

    Among the options, only the at symbol (@) is used to start instance variables.
  3. Final Answer:

    An at symbol (@) -> Option A
  4. 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?
easy
A. var @name = 'Alice'
B. @name = 'Alice'
C. name = @'Alice'
D. def @name = 'Alice'

Solution

  1. Step 1: Understand instance variable assignment syntax

    In Ruby, instance variables are assigned by writing @variable_name = value inside methods or constructors.
  2. Step 2: Check each option

    @name = 'Alice' correctly assigns an instance variable. The other options use invalid syntax.
  3. Final Answer:

    @name = 'Alice' -> Option B
  4. 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

  1. Step 1: Understand instance variable assignment in initialize

    The initialize method sets @name to 'Bob' when Person.new('Bob') is called.
  2. Step 2: Evaluate greet method output

    The greet method returns a string with #{@name} replaced by the instance variable value 'Bob'.
  3. Final Answer:

    Hello, Bob! -> Option D
  4. 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

  1. Step 1: Check variable assignment in initialize

    The code assigns local variable name = model, not instance variable @name.
  2. Step 2: Understand effect on show method

    Since @name is never set, @name is nil, so puts prints an empty line (nil).
  3. Final Answer:

    Instance variable @name is not assigned, so nil is printed -> Option C
  4. 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

  1. 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.
  2. 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.
  3. Final Answer:

    class Book def initialize(title, author) @title = title @author = author end def description "#{@title} by #{@author}" end end -> Option A
  4. 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 unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard