Ruby + Rails no Mundo Real 2010 - Voodoo é pra Jacu - Entendendo metaprogramação em ruby

Post on 01-Nov-2014

2.033 views 3 download

Tags:

description

Palestra apresentada durante o evento Ruby + Rails no Mundo Real 2010. Entendendo, de verdade, como funciona metaprogramação em ruby e desmistificando o que normalmente chamam de magia negra.

Transcript of Ruby + Rails no Mundo Real 2010 - Voodoo é pra Jacu - Entendendo metaprogramação em ruby

Metaprogramação é a programação de programas que escrevem ou manipulam outros programas (ou a

si próprios) assim como seus dados

O que é metaprogramação?

Metaprogramming is writing code that writes code

O que é metaprogramação?

Metaprogramming is writing code that manipulates language

constructs at runtime

Qual a tarifa agora?

5

class Calculator def calculate(time) if (7...21).include?(time.hour) 1 else 0.5 end endend

p Time.now.tarifa

6

class Time def tarifa if (7...21).include?(hour) 1 else 0.5 end endend

p Time.now.tarifa

"I invented the term Object-Oriented, and I can tell you I did not have C++ in mind." -

Alan Kay

class

class

Codando...

woody.class == amigo.class

• Eu realmente posso adicionar um método a um único objeto?

• Onde o método está?

• Que tipo de objeto pode definir um método?

Criação de métodos

• Também conhecidas como Metaclass, Eigenclass, etc

• É uma classe como outra qualquer, mas escondida

• Existe uma para cada objeto (lazy)

Singleton Class

Qual é a Singleton Class

class << self self end

Qual é a Singleton Class

class Object def singleton_class class << self self end endend

Codando...

Como logar a chamada de um método?

alias :new_name :old_name

Que tal só ‘log :voar’?

Abrindo a classe...

E se eu quiser logar mais de método?

Generalização