Class-level behavior lets you set rules or actions that apply to all objects made from that class. It helps keep things organized and avoids repeating the same code for each object.
Why class-level behavior matters in Ruby
class ClassName @@class_variable = value # class variable shared by all objects def self.class_method # code for class method end def instance_method # code for instance method end end
Class variables start with @@ and are shared by all instances of the class.
Class methods start with self. and can be called on the class itself, not on objects.
class Dog @@count = 0 def initialize @@count += 1 end def self.count @@count end end
class Car @@wheels = 4 def self.wheels @@wheels end end
This program creates two Book objects. It uses a class variable to count how many books were made. The class method total_books shows the count.
class Book @@total_books = 0 def initialize(title) @title = title @@total_books += 1 end def self.total_books @@total_books end def title @title end end book1 = Book.new("Ruby Basics") book2 = Book.new("Learn Programming") puts "First book title: #{book1.title}" puts "Second book title: #{book2.title}" puts "Total books created: #{Book.total_books}"
Class variables are shared across the class and all its instances, so changing it affects all objects.
Use class methods to perform actions related to the class itself, like counting objects or returning shared info.
Be careful with class variables in inheritance because subclasses share the same class variable.
Class-level behavior helps manage data and actions shared by all objects of a class.
Class variables and class methods are the main tools to create class-level behavior.
This keeps your code clean and avoids repeating the same information in every object.
Practice
Solution
Step 1: Understand class-level behavior
Class-level behavior means data or methods shared by all objects of a class, not unique to each object.Step 2: Identify the purpose
Sharing data and methods avoids repeating the same information in every object and keeps code clean.Final Answer:
To share data and methods among all instances of the class -> Option AQuick Check:
Class-level behavior = shared data/methods [OK]
- Confusing class-level with instance-level data
- Thinking class-level makes objects faster
- Believing class-level removes instance variables
Solution
Step 1: Recall class method syntax
In Ruby, class methods are defined withdef self.method_nameinside the class.Step 2: Check options
def self.method_name; end usesdef self.method_name, which is correct. def method_name; end defines an instance method. def @method_name; end uses invalid syntax. def class.method_name; end is incorrect syntax.Final Answer:
def self.method_name; end -> Option DQuick Check:
Class method syntax = def self.method_name [OK]
- Defining class methods without self.
- Using @ for method names
- Trying def class.method_name syntax
class Dog
@@count = 0
def initialize
@@count += 1
end
def self.count
@@count
end
end
Dog.new
Dog.new
puts Dog.countSolution
Step 1: Understand class variable usage
@@count is a class variable shared by all Dog instances. It starts at 0.Step 2: Count increments on each new Dog
Each Dog.new calls initialize, which adds 1 to @@count. Two Dog.new calls increase @@count to 2.Step 3: Output the class variable
Dog.count returns @@count, which is 2, so puts prints 2.Final Answer:
2 -> Option AQuick Check:
Class variable increments twice = 2 [OK]
- Thinking @@count resets for each object
- Confusing class variables with instance variables
- Expecting an error from @@count usage
class Cat
@@count = 0
def initialize
@count += 1
end
def self.count
@@count
end
end
Cat.new
Cat.new
puts Cat.countSolution
Step 1: Check variable usage in initialize
The code uses@count(an instance variable) instead of@@count(class variable) to increment count.Step 2: Understand effect of mistake
Instance variable @count is nil initially, so@count += 1causes an error or does not affect class count.Step 3: Confirm other parts are correct
Class variable @@count is initialized and count method exists, so no other errors.Final Answer:
Using @count instead of @@count in initialize -> Option BQuick Check:
Increment class variable with @@count, not @count [OK]
- Incrementing instance variable instead of class variable
- Assuming @count affects all instances
- Ignoring variable initialization errors
Solution
Step 1: Understand the goal
We want to count method calls shared by all instances, so data must be shared at class level.Step 2: Evaluate options
Class variable @@counter is shared by all instances, so incrementing it inside the instance method tracks total calls. Instance variable @counter is unique per object, local variable resets each call, global variable $counter works but is discouraged.Step 3: Choose best practice
Using @@counter is the correct and clean way to track calls across all instances.Final Answer:
Use a class variable @@counter incremented inside the instance method -> Option CQuick Check:
Class variable tracks shared count [OK]
- Using instance variables which count per object
- Using local variables which reset each call
- Using global variables which pollute global scope
Ready to prove it?
Pass the test and this pattern moves unknown
