Dom 6 Jul 2008
Ontem fui assistir o Show Day Rails palestrado pelo grande Fábio Akita (www.akitaonrails.com) que como muitos sabem é um dos maiores nomes de Ruby on Rails no Brasil e no mundo.
O curso em si foi muito interessante, ele demonstrou alguns conceitos de Ruby, sendo que um deles me chamou bastante a atenção foi o fato da linguagem suportar metaprogramação uma vez que é dinâmica.
Bom para quem não sabe metaprogramação basicamente significa “código que gera código”, o primeiro impacto causado a maioria dos programadores que não conheciam este conceito é de se sentir muito impressionado, porém depois vem a pergunta “para que eu vou precisar disso?”
Veja este exemplo:
#método que recebe um bloco como parâmetro e o executa
def custom(&block)
block.call
end
#chamando o método
custom {puts "olá"}
Em tempo de execução na verdade o método incorpora o bloco de código para dentro ficando assim:
def custom
puts "olá"
end
Qualquer bloco de código passado por parâmetro será incorporado a este método.
Uma maneira mais simples e limpa:
def custom
yield
end
custom {puts "Testing the yield power"}
A metaprogramação tem utilidade sim, utilidade que pode não ser enxergada a primeira momento por alguns programadores pois trata-se de algo um pouco avançado, no entanto ela pode ser usada por exemplo para geração de testes em Rails de uma forma mais inteligente chamada de Rspec que implementa o conceito BDD (Behaviour Driven Development).
Até lá.
