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

  • 1,526 views
Uploaded on

Palestra apresentada durante o evento Ruby + Rails no Mundo Real 2010. …

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.

More in: Technology , Sports
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,526
On Slideshare
0
From Embeds
0
Number of Embeds
4

Actions

Shares
Downloads
8
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

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