Executando métodos sem se preocupar com exceções no Ruby
14/07/08
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?
- Permalink
- Trackback
- Comentários (4)
- Ao som de: Kay Hanley – Mean Streak
Criando objetos de dados com OpenStruct
06/07/08
Imagine que você tenha um hash cujos atributos serão chamados muitas vezes durante um trecho de código.
user = {
:name => 'John Doe',
:blog => 'http://bleedingfromtheinside.com',
:style => 'from uk'
}
puts user[:name]
puts user[:blog]
puts user[:style]
O hash, embora útil, ainda não é a forma mais prática.
Seria muito mais conveniente se você pudesse acessar cada um dos atributos como se fossem métodos.
Algumas pessoas que não conhecem a linguagem muito bem iriam estender a classe Hash, sobrescrevendo o método
method_missing, como já vi algumas implementações por aí.
Mas como você é um cara esperto, iria utilizar o OpenStruct.
O OpenStruct permite que você crie objetos com atributos que não estão atrelados a uma classe, mas ainda assim respondem como se fossem métodos, com getters e setters.
require 'ostruct'
user = OpenStruct.new({
:name => 'John Doe',
:blog => 'http://bleedingfromtheinside.com',
:style => 'from uk'
})
puts user.name
puts user.blog
puts user.style
Muito melhor! Os atributos também podem ser modificados. Basta atribuir um valor qualquer.
user.style = 'emo'
Conheça a linguagem que está programando. O Ruby é muito simples de ser adaptado às suas necessidades, mas se você não conhecer a linguagem irá reinventar a roda e, quase sempre, sua solução não será a melhor nem a mais rápida.
- Permalink
- Trackback
- Comentários (0)
- Ao som de: Propagandhi – A Public Dis-service Announcement From Shell
Otimizando o Autotest
20/06/08
Toda vez que executo o Autotest,
não demora muito para o cooler do meu Macbook
ligar e parecer que vai decolar!
O problema é que o Autotest busca alterações nos arquivos a cada segundo, o que ocasiona um uso muito intenso da CPU.
Para resolver este problema, basta você aumentar este tempo de verificação que, no exemplo abaixo, foi definido como 5 segundos. Além disso, podemos ignorar alguns diretórios, diminuindo os arquivos que precisam ser verificados. Abra seu arquivo "~/.autotest" e adicione o código abaixo.
Autotest.add_hook :initialize do |at|
at.sleep = 5
%w{.svn .git public vendor}.each { |exception| at.add_exception(exception) }
end
Simples, rápido e, o melhor de tudo, silencioso!
- Permalink
- Trackback
- Comentários (0)
- Ao som de: Propagandhi – A Public Dis-service Announcement From Shell
