Bird
Raised Fist0
Rubyprogramming~20 mins

Class instance variables as alternative in Ruby - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Ruby Class Instance Variables Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of class instance variable usage
What is the output of this Ruby code using class instance variables?
Ruby
class Counter
  @count = 0

  def self.increment
    @count += 1
  end

  def self.count
    @count
  end
end

Counter.increment
Counter.increment
puts Counter.count
A0
BError: undefined method `+' for nil:NilClass
C2
Dnil
Attempts:
2 left
💡 Hint
Class instance variables belong to the class itself, not instances.
❓ Predict Output
intermediate
2:00remaining
Difference between class variable and class instance variable
What will this Ruby code output?
Ruby
class Example
  @@var = 1
  @var = 2

  def self.class_var
    @@var
  end

  def self.class_instance_var
    @var
  end
end

puts Example.class_var
puts Example.class_instance_var
A1\n2
B1\nnil
Cnil\n2
D2\n1
Attempts:
2 left
💡 Hint
Class variables start with @@ and are shared across the class hierarchy.
🔧 Debug
advanced
2:00remaining
Why does this class instance variable return nil?
This Ruby code prints nil. Why?
Ruby
class Sample
  @value = 10

  def value
    @value
  end
end

obj = Sample.new
puts obj.value
AClass instance variables are not accessible inside instance methods by default.
BSyntax error because @value is not initialized in constructor.
CThe method value is missing a return statement.
DInstance method accesses instance variable of object, but @value is only set on class, not instance.
Attempts:
2 left
💡 Hint
Class instance variables belong to the class object, not to instances.
🧠 Conceptual
advanced
2:00remaining
Class instance variables and inheritance behavior
Given this Ruby code, what will be the output?
Ruby
class Parent
  @data = 'parent data'

  def self.data
    @data
  end
end

class Child < Parent
  @data = 'child data'
end

puts Parent.data
puts Child.data
Achild data\nchild data
Bparent data\nchild data
Cparent data\nparent data
Dnil\nnil
Attempts:
2 left
💡 Hint
Class instance variables are not shared between parent and child classes.
📝 Syntax
expert
2:00remaining
Identify the syntax error in class instance variable usage
Which option contains a syntax error when trying to define and access a class instance variable?
Ruby
class Test
  @var = 5

  def self.get_var
    @var
  end
end
A
class Test
  @var = 5
  def get_var
    self.@var
  end
end
B
class Test
  @@var = 5
  def self.get_var
    @var
  end
end
C
class Test
  @var = 5
  def self.get_var
    @var
  end
end
D
class Test
  @var = 5
  def self.get_var
    @@var
  end
end
Attempts:
2 left
💡 Hint
Class instance variables are accessed in class methods, not instance methods.

Practice

(1/5)
1. What is the main purpose of using class instance variables in Ruby?
easy
A. To store data shared by the class itself, not by individual objects
B. To store data unique to each object instance
C. To define methods that all instances can use
D. To create global variables accessible everywhere

Solution

  1. Step 1: Understand class instance variables

    Class instance variables belong to the class object itself, not to each instance.
  2. Step 2: Compare with instance variables

    Instance variables store data unique to each object, while class instance variables store data unique to the class object, not shared with instances.
  3. Final Answer:

    To store data shared by the class itself, not by individual objects -> Option A
  4. Quick Check:

    Class instance variables = data for the class object [OK]
Hint: Class instance variables hold data for the class, not objects [OK]
Common Mistakes:
  • Confusing class instance variables with instance variables
  • Thinking class instance variables are global variables
  • Assuming class instance variables are shared with subclasses automatically
2. Which of the following is the correct way to define a class instance variable in Ruby?
easy
A. def @count; @count; end
B. @count = 0
C. @@count = 0
D. self.@count = 0

Solution

  1. Step 1: Identify class instance variable syntax

    Class instance variables start with a single @ and are defined inside the class but outside methods.
  2. Step 2: Check each option

    @count = 0 uses @count = 0 correctly inside the class body. @@count = 0 uses class variables (@@), which are different. def @count; @count; end is invalid method syntax. self.@count = 0 is invalid syntax.
  3. Final Answer:

    @count = 0 -> Option B
  4. Quick Check:

    Class instance variable = single @ [OK]
Hint: Class instance variables use single @ inside class body [OK]
Common Mistakes:
  • Using @@ instead of @ for class instance variables
  • Trying to use self.@ which is invalid
  • Defining variables inside methods without self
3. What will be the output of the following Ruby code?
class Dog
  @count = 0

  def self.increment
    @count += 1
  end

  def self.count
    @count
  end
end

Dog.increment
Dog.increment
puts Dog.count
medium
A. Error
B. 0
C. nil
D. 2

Solution

  1. Step 1: Understand class instance variable usage

    @count is a class instance variable initialized to 0. The class methods increment and count access it.
  2. Step 2: Trace method calls

    Calling Dog.increment twice adds 1 each time, so @count becomes 2. Dog.count returns 2.
  3. Final Answer:

    2 -> Option D
  4. Quick Check:

    Increment twice, count = 2 [OK]
Hint: Class methods access class instance variables with @ [OK]
Common Mistakes:
  • Expecting instance variable @count to be nil or 0
  • Confusing class instance variables with class variables @@count
  • Assuming instance methods can access @count directly
4. Identify the error in this Ruby code using class instance variables:
class Cat
  @count = 0

  def increment
    @count += 1
  end

  def self.count
    @count
  end
end

cat = Cat.new
cat.increment
puts Cat.count
medium
A. Missing initialization of @count
B. Class method count cannot access @count
C. Instance method increment cannot access class instance variable @count
D. Syntax error in method definitions

Solution

  1. Step 1: Check variable scopes

    @count is a class instance variable, accessible only in class methods, not instance methods.
  2. Step 2: Analyze increment method

    increment is an instance method trying to update @count, but this @count is an instance variable, not the class instance variable.
  3. Final Answer:

    Instance method increment cannot access class instance variable @count -> Option C
  4. Quick Check:

    Class instance vars not accessible in instance methods [OK]
Hint: Instance methods can't access class instance variables directly [OK]
Common Mistakes:
  • Assuming @count in instance method is same as class @count
  • Trying to access class instance variables without class methods
  • Confusing class variables @@count with class instance variables
5. How can you modify this Ruby class to keep track of how many objects have been created using class instance variables?
class Bird
  def initialize
    # increment count here
  end

  def self.count
    @count
  end
end
hard
A. Add @count = 0 outside methods and increment @count inside a class method called from initialize
B. Use @@count variable and increment it inside initialize
C. Define @count inside initialize and increment it
D. Add self.count += 1 inside initialize

Solution

  1. Step 1: Initialize class instance variable

    Define @count = 0 inside the class but outside methods to store count.
  2. Step 2: Increment count via class method

    Create a class method to increment @count and call it inside initialize to update count on each new object.
  3. Final Answer:

    Add @count = 0 outside methods and increment @count inside a class method called from initialize -> Option A
  4. Quick Check:

    Class instance var + class method increment = object count [OK]
Hint: Use class method to update class instance variable from initialize [OK]
Common Mistakes:
  • Using class variables @@count instead of class instance variables
  • Trying to increment @count directly inside initialize without class method
  • Defining @count inside initialize which resets it each time
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