= [:comer, :dormir, :jogar] end end jackson = Habilidade.new puts "A primeira tarefa de Jackson é: #{jackson.habilidades.first}" Perceba que foi preciso usar o jackson.habilidades.first para conseguir acessar o primeiro item da lista de habilidades. Isso não é um problema, mas nosso “code smell” não é dos melhores.
= [:comer, :dormir, :jogar] end def primeira_tarefa @habilidades.first end end jackson = Habilidade.new puts "A primeira tarefa de Jackson é: #{jackson.primeira_tarefa}" A primeira coisa que podemos fazer para melhorar é encapsular o acesso em um método, conforme acima.
Forwardable def_delegator :@habilidades, :first, :primeira_tarefa def initialize @habilidades = [:comer, :dormir, :jogar] end end jackson = Habilidade.new puts "A primeira tarefa de Jackson é: #{jackson.primeira_tarefa}" Agora usando o módulo Forwardable nosso código fica muito mais amigável e profissional!
Forwardable def_delegator :@habilidades, :first, :primeira_tarefa def_delegators :@habilidades, :last, :size def initialize @habilidades = [:comer, :dormir, :jogar] end end jackson = Habilidade.new puts "A primeira tarefa de Jackson é: #{jackson.primeira_tarefa}" puts "A última tarefa de Jackson é: #{jackson.last}" puts "A quantidade total de tarefas de Jackson é: #{jackson.size}" Por fim, podemos conhecer o método def_delegators que permite “mapear” vários métodos de uma única vez.