Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Conhecendo o módulo Forwardable do Ruby

Conhecendo o módulo Forwardable do Ruby

Conhecendo o módulo Forwardable do Ruby

Jackson Pires

August 27, 2018
Tweet

More Decks by Jackson Pires

Other Decks in Technology

Transcript

  1. Ruby Forwardable module class Habilidade attr_accessor :habilidades def initialize @habilidades

    = [: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.
  2. Ruby Forwardable module class Habilidade attr_accessor :habilidades def initialize @habilidades

    = [: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.
  3. Ruby Forwardable module require 'forwardable' class Habilidade attr_accessor :habilidades extend

    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!
  4. Ruby Forwardable module require 'forwardable' class Habilidade attr_accessor :habilidades extend

    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.