Ruby, metaprogramação e convenções

28 March 2009

Metaprogramação (metaprogramming) é a técnica de utilizar código para gerar código. Uma linguagem onde o metaprograma é escrito é chamado de metalinguagem. A linguagem Ruby é dinâmica ao extremo, permitindo que sejam criados métodos em outros objetos. Vamos criar uma classe Carro vazia. E uma classe Oficina, essa por sua vez sabe turbinar um carro: class Carro end class Oficina def turbina(carro) def carro.turbo puts "turbinado!!" end end end Se instanciarmos um objeto Carro e chamarmos o método turbina, evidentemente ele não existe, porém podemos fazer com que a classe oficina crie o método no nosso objeto: c = Carro.new oficina = Oficina.new oficina.turbina c c.turbo # => turbinado!! Outra coisa interessante é são as convenções de métodos que mudam o estado de objetos, colocando o caracter "!" (bang) para informar o efeito colateral. Vamos criar o método "pinta" na Oficina e um construtor na classe carro obrigando a passar a cor. class Carro attr_accessor :cor def initialize(cor) @cor = cor end end class Oficina def pinta!(carro) carro.cor = 'azul' end def turbina(carro) def carro.turbo puts "turbinado!!" end end end c = Carro.new('verde') puts c.cor oficina = Oficina.new oficina.turbina c c.turbo oficina.pinta! c puts c.cor #=> verde #=> turbinado!! #=> azul Metaprogramação e as convenções da linguagem ruby são extremamente úteis para chegar na melhor legibilidadede código possível com Ruby.
comments powered by Disqus