Bird
Raised Fist0
Rubyprogramming~5 mins

Class instance variables as alternative in Ruby - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a class instance variable in Ruby?
A class instance variable is a variable that belongs to the class object itself, not to instances of the class. It is prefixed with a single @ and is used to store data related to the class, separate from instance variables of objects.
Click to reveal answer
intermediate
How do class instance variables differ from class variables in Ruby?
Class instance variables (@var) belong only to the class object and are not shared with subclasses. Class variables (@@var) are shared among a class and all its subclasses. This makes class instance variables safer for storing class-specific data.
Click to reveal answer
beginner
How do you define and access a class instance variable in Ruby?
Define a class instance variable inside the class body using @var. Access it with class methods using @var or with self.instance_variable_get(:@var). Example:<br><pre>class MyClass
  @count = 0

  def self.count
    @count
  end
end</pre>
Click to reveal answer
intermediate
Why might you choose class instance variables over class variables?
Class instance variables avoid unexpected sharing of data between a class and its subclasses. This helps prevent bugs when subclasses modify shared data unintentionally. They provide better encapsulation for class-specific state.
Click to reveal answer
intermediate
Can class instance variables be accessed from instance methods?
No, class instance variables belong to the class object, not to instances. To access them from instance methods, you need to call class methods or use self.class to reach the class and then access the variable.
Click to reveal answer
Which symbol prefix is used for class instance variables in Ruby?
A$
B@
C@@
D#
What is a key advantage of using class instance variables over class variables?
AThey are shared with subclasses
BThey are global variables
CThey prevent data sharing between classes and subclasses
DThey can be accessed without methods
How can you access a class instance variable inside a class method?
AUsing variable without prefix
BUsing @@variable
CUsing $variable
DUsing @variable
Can instance methods directly access class instance variables?
ANo, they must use self.class to access them
BYes, directly with @variable
CYes, with @@variable
DNo, they cannot access them at all
Where are class instance variables stored in Ruby?
AIn the class object itself
BIn each instance of the class
CIn global memory
DIn the superclass only
Explain what class instance variables are and how they differ from class variables in Ruby.
Think about where the variable lives and who can see it.
You got /3 concepts.
    Describe how to define and access a class instance variable in Ruby, including from instance methods.
    Remember the @ prefix and how instance methods reach the class.
    You got /3 concepts.

      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