What do attr_reader, attr_writer and attr_accessor do?
Assesses fundamental understanding of Ruby conventions, runtime behavior, and memory/performance considerations.
Hiring managers look for precision, avoidance of ambiguous jargon, and ability to explain trade-offs under real production conditions.
Ruby encapsulates instance variables such as @name, which are private by default. attr_reader, attr_writer and attr_accessor are class macros that define getter and setter methods.
class User
attr_reader :id # def id; @id; end
attr_writer :email # def email=(value); @email = value; end
attr_accessor :name # both getter and setter
end
u = User.new
u.name = "Ada"
puts u.name
attr_accessor :a, :b defines several at once. These are ordinary methods, so they can be overridden or made private with private :name=, restricting external writes.
attr_* accepts an optional boolean second argument to skip instance-variable initialisation warnings. Using accessors internally rather than @name directly lets subclasses override behaviour and keeps the interface consistent. For deeply immutable objects use attr_reader plus freeze.
Candidate Response Strategy & Interview Tips
- Start with a concise one-sentence summary: Deliver a direct, confident answer first before expanding into nuances.
- Demonstrate real-world trade-offs: Discuss where this approach excels and when you would avoid it in production systems.
- Discuss complexity & edge cases: Proactively explain time/space complexity or boundary conditions (null values, scale limits).
- Prepare for interviewer follow-ups: Technical hiring panels frequently probe deeper into concurrency, backward compatibility, or alternative libraries.