What if changing one number could fix your whole program instantly?
Why Constants in classes in Ruby? - Purpose & Use Cases
Imagine you have a program where you need to use the same fixed value, like a tax rate or a maximum score, in many places. You write that number everywhere by hand.
When you want to change that value, you have to find and update every single spot manually. This is slow and easy to miss, causing bugs and confusion.
Using constants inside classes lets you store that fixed value in one place. You can use it everywhere by referring to the constant, so changing it once updates all uses automatically.
tax_rate = 0.08 price_with_tax = price * (1 + 0.08)
class Store TAX_RATE = 0.08 end price_with_tax = price * (1 + Store::TAX_RATE)
You can keep your fixed values organized and easy to update, making your code cleaner and safer.
Think of a game where the maximum player level is a constant. Defining it once in a class constant means you can change the max level easily without hunting through all the code.
Constants store fixed values in one place.
They prevent mistakes from repeated manual changes.
Using class constants keeps code clear and easy to maintain.
Practice
Solution
Step 1: Understand constant naming rules
In Ruby, constants always start with a capital letter and are usually defined outside methods within classes or modules.Step 2: Check where constants are defined
Constants are not meant to be changed and are not defined inside methods but at the class/module level.Final Answer:
Constants start with a capital letter and are defined outside methods. -> Option CQuick Check:
Constants = Capital letter + outside methods [OK]
- Thinking constants can be changed like variables
- Defining constants inside methods
- Using lowercase letters for constants
Solution
Step 1: Identify constant syntax
Constants in Ruby start with a capital letter and are assigned directly inside the class but outside any method.Step 2: Check each option
class MyClass PI = 3.14 end correctly assigns PI = 3.14 inside the class. class MyClass pi = 3.14 end uses lowercase (not constant). class MyClass def PI = 3.14 end tries to define a method named PI incorrectly. class MyClass @PI = 3.14 end uses an instance variable (@PI), not a constant.Final Answer:
class MyClass PI = 3.14 end -> Option BQuick Check:
Constants = Capital letter + direct assignment [OK]
- Using lowercase names for constants
- Defining constants inside methods
- Confusing constants with instance variables
class Car
WHEELS = 4
def wheels
WHEELS
end
end
car = Car.new
puts car.wheelsSolution
Step 1: Understand constant access inside instance method
The constant WHEELS is defined inside the class Car. Inside instance methods, constants can be accessed directly by their name.Step 2: Trace the method call
Calling car.wheels returns the constant WHEELS value, which is 4. Then puts prints 4.Final Answer:
4 -> Option AQuick Check:
Constant accessed inside method = 4 [OK]
- Expecting an error for constant access
- Thinking constant name prints instead of value
- Confusing constants with instance variables
class Book
TITLE = "Ruby Guide"
def change_title
TITLE = "New Title"
end
endSolution
Step 1: Check constant assignment rules
Constants in Ruby should not be reassigned once set. Assigning a constant inside a method is not allowed and causes a warning or error.Step 2: Analyze the code
The method change_title tries to assign a new value to TITLE constant, which is invalid.Final Answer:
Cannot assign to constant TITLE inside method. -> Option DQuick Check:
Constants cannot be reassigned inside methods [OK]
- Trying to change constants inside methods
- Confusing constants with variables
- Ignoring Ruby warnings about constant reassignment
puts Vehicle::TYPE print?
class Vehicle
TYPE = "Transport"
class Car
TYPE = "Car"
end
end
puts Vehicle::TYPESolution
Step 1: Understand constant lookup in nested classes
Constants are scoped to the class they are defined in. Vehicle::TYPE refers to the constant TYPE inside Vehicle, not inside Vehicle::Car.Step 2: Check the code output
Vehicle::TYPE is "Transport". The inner class Car has its own TYPE, but it is not accessed here.Final Answer:
"Transport" -> Option AQuick Check:
Outer class constant accessed by Vehicle::TYPE = "Transport" [OK]
- Confusing inner class constant with outer class constant
- Expecting error for nested constants
- Using wrong scope operator
Ready to prove it?
Pass the test and this pattern moves unknown
