Table of contents
What is a getter method
What is a setter method
What are accessors?
References
What is a getter method?
...
For further actions, you may consider blocking this person and/or reporting abuse
Another neat trick is you can mark these as private so you can use them internally without worrying about them leaking out by throwing a
private
into the class.This can be useful if you don't like remembering when to use
@year
vsyear
or perhaps you want to be prepared to abstract it later.It seems odd to declare these as
private
since you can always refer to them by their@
name internally.It can be odd, but it can also be useful as it allows you to more easily override it later without having to go find/replace all instances of
@year
in your class.Or, if a class inherits from it and needs to change how
year
is generated it's easier it doesn't have to worry about parent class using@year
.If that makes sense.
It just seems inconsistent to use
year
andself.year = ...
in the code where one's bare and the other's necessarily prefixed, instead of@year
consistently. This plus the way that@year
is by default "private".One of the major goals of object-oriented design is to properly contain any changes like that, so replacing
@year
with something else is at least contained to the one file or scope.Subclass concerns are valid, though in Ruby it's generally understood you need to play nice with your parent's properties and avoid really getting in there and wrecking around.
Thanks for sharing !!
These are also called "accessors" (read) and "mutators" (write) in other languages, but the principle is the same. Useful terminology for those coming to Ruby from places where those terms are used instead.
Ruby's way of declaring them as
x=
type methods is fairly unique and makes for some extremely concise code since there's no need forgetX
/setX
pairs, it's justx
andx=
.Another thing worth mentioning is if you have a "setter" or
attr_writer
you can't use that without prefixing it with some kind of object, evenself
.For example:
That's because in the code
test = :assigned
creates a variable namedtest
, it doesn't call thetest=
method. To use those you must doself.test = :assigned
inside the context of that method orexample.test = :assigned
by using some kind of variable for reference.This leads to a lot of confusion in places like ActiveRecord where assigning to the auto-generated attributes "doesn't work".
I have a question how to generate this getter dynamically, for example you get a string argument and you have to generate a setter method for it which sets an instance variable which gets triggered when someone assign a value to it
Thank you for the detailed explanation of getter Death By AI and setter methods! Itβs clear how crucial these methods are for accessing and modifying instance variables in Ruby.
Thanks for the detailed explanation of the getter, setter, and accessor methods in Ruby. This information is very helpful to understand Mapquest Directions how to manage and access instance variables in a class efficiently.
Thank youπ!
I sincerely appreciate it. I just want to let you know that the article is fantastic since this knowledge is truly helpful to me bluey