Your SlideShare is downloading. ×
0
Voodoo é pra jacu!
         metaprogramação em ruby



   Leonardo Bessa            David Paniz
leobessa@gmail.com      da...
O que é metaprogramação?
 Metaprogramação é a programação de programas
que escrevem ou manipulam outros programas (ou a
  ...
O que é metaprogramação?

 Metaprogramming is writing code
        that writes code


 Metaprogramming is writing code
   ...
Qual a tarifa agora?
class Calculator
  def calculate(time)
    if (7...21).include?(time.hour)
      1
    else
      0.5
    end
  end
end

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

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
Criação de métodos


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

• Onde o método está?

• Que tipo de o...
Singleton Class


• Também conhecidas como Metaclass,
  Eigenclass, etc

• É uma classe como outra qualquer,
  mas escondi...
Qual é a
Singleton Class

    class << self
       self
    end
Qual é a
Singleton Class

   class Object
    def singleton_class
      class << self
         self
      end
    end
   e...
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
Ruby + Rails no Mundo Real 2010 - Voodoo é pra Jacu - Entendendo metaprogramação em ruby
Ruby + Rails no Mundo Real 2010 - Voodoo é pra Jacu - Entendendo metaprogramação em ruby
Ruby + Rails no Mundo Real 2010 - Voodoo é pra Jacu - Entendendo metaprogramação em ruby
Ruby + Rails no Mundo Real 2010 - Voodoo é pra Jacu - Entendendo metaprogramação em ruby
Upcoming SlideShare
Loading in...5
×

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

1,588

Published on

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.

Published in: Technology, Sports
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,588
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
8
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 1. Voodoo é pra jacu! metaprogramação em ruby Leonardo Bessa David Paniz leobessa@gmail.com davidpaniz@gmail.com @leobessa @davidpaniz www.davidpaniz.com
  2. 2. O que é metaprogramação? Metaprogramação é a programação de programas que escrevem ou manipulam outros programas (ou a si próprios) assim como seus dados
  3. 3. O que é metaprogramação? Metaprogramming is writing code that writes code Metaprogramming is writing code that manipulates language constructs at runtime
  4. 4. Qual a tarifa agora?
  5. 5. class Calculator def calculate(time) if (7...21).include?(time.hour) 1 else 0.5 end end end p Time.now.tarifa 5
  6. 6. class Time def tarifa if (7...21).include?(hour) 1 else 0.5 end end end p Time.now.tarifa 6
  7. 7. "I invented the term Object- Oriented, and I can tell you I did not have C++ in mind." - Alan Kay
  8. 8. class
  9. 9. class
  10. 10. Codando...
  11. 11. woody.class == amigo.class
  12. 12. Criação de métodos • 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?
  13. 13. Singleton Class • Também conhecidas como Metaclass, Eigenclass, etc • É uma classe como outra qualquer, mas escondida • Existe uma para cada objeto (lazy)
  14. 14. Qual é a Singleton Class class << self self end
  15. 15. Qual é a Singleton Class class Object def singleton_class class << self self end end end
  16. 16. Codando...
  17. 17. Como logar a chamada de um método?
  18. 18. alias :new_name :old_name
  19. 19. Que tal só ‘log :voar’?
  20. 20. Abrindo a classe...
  21. 21. E se eu quiser logar mais de método?
  22. 22. Generalização
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×