Pesquisar

quarta-feira, 9 de janeiro de 2008

Ruby: usando classe aberta (open classe)

Extender (não no sentido "carregado" da herança) uma classe já existente.... Interessante recurso, lembro de algo similar no mundo .net os extension methods.

#uma classe já existente.
class Integer

#adicionando métodos a mesma.
def am(*args)
self == 12 ? 0 : self
end

def pm(*args)
self == 12 ? 12 : self +12
end
end


#veja que interessante o uso.
i = 4.pm
puts "4Pm = " << i.to_s #deve aparecer 4Pm = 16
i = 4.am
puts "4Am = " << i.to_s #deve aparecer 4Am = 4

#outro exemplo...
class String
def em_maisculo
self.upcase
end
end

puts "galaxy".em_maisculo



Esse recurso pode facilitar a escrita de interfaces fluente... imagine.
compromisso.adicionar("ler algo sobre ddd").comecando_as(2.Pm).ate_as(4.Pm).hoje()


* Exemplos inspirados numa apresentação de um trabalhador da throughworks.

Nenhum comentário: