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

Avatar for Jackson Pires

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.