In short, the getter and setter methods expose fields in the class. They can expose the field in a raw way, such as
[privado] meu_campo = 25
[público] get_meu_campo # retorna 25
[público] set_meu_campo(valor) # seta meu_campo para valor (parâmetro)
or they can use some kind of logic, such as
[privado] meu_campo = 25
[público] get_meu_campo # retorna 25 * 2
[público] set_meu_campo(valor) # seta meu_campo para valor/2 (parâmetro)
Stop, look and listen
If you still do not understand what getters and setters are not
answer now. Understand what they are for the links below and continue reading.
In most languages, the naming pattern for writing a getter and a setter is
private int propriedade;
public int getPropriedade() { ... }
public void setPropriedade(valor) { ... }
But in Ruby it's different
@propriedade = 0
def propriedade; end
def propriedade=; end
See a slightly more contextualized application :
class Pessoa < ActiveRecord::Base
attr_accessible :nome, :sobrenome
def nome_completo # getter
[@nome, @sobrenome].join
end
def nome_completo=(value) # setter
@nome, @sobrenome = value.split(' ')
end
end
If you do not need any specific logic in the getter or in the setter, use attr_accessor
. That is:
class Carro
def velocidade # getter
@velocidade
end
def velocidade=(nova_velocidade) # setter
@velocidade = nova_velocidade
end
end
is the same as
class Carro
attr_accessor :velocidade # getter e setter
end
Learn that attr_accessor
is a shortcut to
class Carro
attr_reader :velocidade # getter
attr_writer :velocidade # setter
end