Carlos Brando

Nome do Jogo

Edge Rails: Object#try

Eu já falei do método try() antes. Na época era apenas uma dica dada por Chris Wanstrath (que ainda nem era famoso pelo GitHub) para simplificar o bom e velho trecho de código:

@person ? @person.name : nil

Que com este método ficaria assim:

@person.try(:name)

# Um outro exemplo, com parâmetros
Person.try(:find, 1)

Ele funciona como o Object#send, mas ao invés de disparar uma exceção ele retorna nil se o método ou o próprio objeto não existirem.

Chris Wanstrath teve esta idéia já faz um bom tempo, e não me pergunte porque só agora isto entrou oficialmente para o Rails. Como já se passou muito tempo, o método já foi aprimorado aceitando também blocos como parâmetros:

@people.try(:map) {|p| p.name}

Isto é útil caso o método que você esteja testando chamar precise receber um bloco.


Todos os exemplos dados aqui funcionarão somente no Ruby on Rails 2.3/3.0 ou superior. Você pode encontrar mais detalhes sobre esta e outras novidades acompanhando a série Edge Rails.

Comments