Go to English Blog

Executando métodos sem se preocupar com exceções no Ruby

Leia em menos de um minuto

Cansado de ter que verificar se um objeto existe antes de chamar algum método ou acessar um atributo?

if @object && @object.some && @object.some.fancy && @object.some.fancy.call
  # do something
else
  puts "meh. i don't like this syntax!"
end

Concordo que isto não é muito comum, mas você já deve ter feito algo como isto:

if @object && @object.respond_to?(:some_method) && @object.some_method
  # do something
end

Evite este tipo de aborrecimento trazido por estas verificações, adicionando um método como este:

def try(&block)
  raise 'No block given' unless block_given?
  yield rescue nil
end

if try { @objet.some.fancy.call }
  # do something
else
  puts 'hey! this call returned nil, false or threw an exception'
end

Muito mais com a cara de Ruby, não acha?