Carlos Brando

Nome do Jogo

O método try() e um objeto nulo

Ontem eu dei a dica do método try(). Porém só hoje fui perceber que existe uma exceção para o uso do método. Ele não vai funcionar se você estiver precisando recuperar a propriedade id do que deveria ser um registro do ActiveRecord se a variável for nula:

@person = nil
@person.try(:id)

Isto retornaria o seguinte:

(irb):7: warning: Object#id will be deprecated; use Object#object_id
=> 4

Hmm… Isto não funciona porque a classe Object também tem uma propriedade id (que deve deixar de existir na próxima versão do ruby), e como a classe NilClass herda dela…

A melhor solução para resolver este problema na minha opinião seria usar algo assim:

class Object
  ##
  #   @person.name unless @person.nil?
  # vs
  #   @person.try(:name)
  def try(method)
    self.send(method) unless self.nil?
  end
end

Comments