Last post I discussed objects and their behavior. This post will cover the attributes of an object and how to manipulate them to cause a certain behavior.
Every object has attributes. To make this clear, I looked up the definition of "Attribute" on Google and here's what it said:
regard something as being caused by (someone or something).
"he attributed the firm's success to the efforts of the managing director"
a quality or feature regarded as a characteristic or inherent part of someone or something.
"flexibility and mobility are the key attributes of our army"
Let's stick with our Cat class from the previous post and give it two attributes, name and breed, using the 'setter' and 'getter' instance variable methods.
class Cat # Object def name=(garfield) #setter @name = garfield end def name #getter @name end def breed=(tabby) #setter @breed = tabby end def breed #getter @breed end end garfield = Cat.new("Garfield") garfield.name # "Garfield"
This block of code contains both a "setter" and "getter" method which writes or sets the attribute and then reads or gets the attribute for the object to use. This code is long and becomes repetitive very quickly and unless you need to customize it, there's a better way to set and get attributes.
We use macro programming to accomplish this. Macros are a tool that allow programmers to reuse code. Attribute readers and writers are macros that implement this same code above with only two lines of code.
class Cat attr_writer :name, :breed #setter attr_reader :name, :breed #getter end
As you can see, much more efficient. William Strunk, in his classic book "The Elements of Style" said, "Omit needless words". Macros in programming omit needless code and allow the attributes to be added much more seamlessly. The attribute writer and reader can be further condensed with the attribute accessor like this:
class Cat attr_accessor :name, :breed # setter and getter all in one line end
Now let's make a new cat, with a name and breed and make it "Meow!" using the attribute accessor.
class Cat attr_accessor :name, :breed def meow puts "Meow!" end end garfield = Cat.new Cat.name = "Garfield" garfield.name # Garfield garfield.breed = "Tabby" garfield.breed # Tabby garfield.meow # Meow!
Claim your page on DEV before someone else does
Level up every day