SlideShare una empresa de Scribd logo
1 de 15
Voodoo é pra jacu!
              metaprogramação em ruby



       Leonardo Bessa                  David Paniz
leonardo.bessa@caelum.com.br   david.paniz@caelum.com.br
                                  www.davidpaniz.com
Que horas são?
## horario.java [java]
System.currentTimeMillis();
      new Date();

    ## horario.rb [ruby]
        Time.now
        Date.today
Quero voltar ao dia 12/11/1955...
Time.now
           12/11/1955
"Eu inventei o capacitor de fluxo"
          Doc (Brown)
"I invented the term Object-
Oriented, and I can tell you I
did not have C++ in mind." -
          Alan Kay
class
class
Criação de métodos


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

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

• Onde o método está?

• Como eu faria em java?
Singleton Class


• Também conhecidas como Metaclass,
  Eigenclass, etc

• É uma classe como outra qualquer,
  mas escondida

• Existe uma para cada objeto (lazy)
Qual é a
Singleton Class

    class << self
       self
    end
Qual é a
Singleton Class

   class Object
    def singleton_class
      class << self
         self
      end
    end
   end

Más contenido relacionado

La actualidad más candente (6)

Introdução ao Ruby
Introdução ao RubyIntrodução ao Ruby
Introdução ao Ruby
 
Introdução ao Ruby on Rails
Introdução ao Ruby on RailsIntrodução ao Ruby on Rails
Introdução ao Ruby on Rails
 
Apresentação 1 o que foi aprendido
Apresentação 1   o que foi aprendidoApresentação 1   o que foi aprendido
Apresentação 1 o que foi aprendido
 
Minicurso javascript
Minicurso javascriptMinicurso javascript
Minicurso javascript
 
08 modificadores static
08   modificadores static08   modificadores static
08 modificadores static
 
Introdução a Linguagem de Programação Ruby
Introdução a Linguagem de Programação RubyIntrodução a Linguagem de Programação Ruby
Introdução a Linguagem de Programação Ruby
 

Último

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
Natalia Granato
 

Último (6)

ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 

Voodoo é pra Jacu - Entendendo metaprogramação em ruby