SlideShare ist ein Scribd-Unternehmen logo
1 von 26
Downloaden Sie, um offline zu lesen
Voodoo é pra jacu!
         metaprogramação em ruby



   Leonardo Bessa            David Paniz
leobessa@gmail.com      davidpaniz@gmail.com
     @leobessa               @davidpaniz
                         www.davidpaniz.com
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
O que é metaprogramação?

 Metaprogramming is writing code
        that writes code


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

p Time.now.tarifa

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

p Time.now.tarifa

                                 6
"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 objeto pode definir um
  método?
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
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

Weitere ähnliche Inhalte

Andere mochten auch

Aplicacoes para celular com Ruby
Aplicacoes para celular com RubyAplicacoes para celular com Ruby
Aplicacoes para celular com Rubymfcastellani
 
Abertura do ruby_rails_no_mundo_real_guru_sp
Abertura do ruby_rails_no_mundo_real_guru_spAbertura do ruby_rails_no_mundo_real_guru_sp
Abertura do ruby_rails_no_mundo_real_guru_spWillian Molinari
 
O que há de novo no Rails 3
O que há de novo no Rails 3O que há de novo no Rails 3
O que há de novo no Rails 3Hugo Baraúna
 
batch - escalando um sistema sem fermento
batch - escalando um sistema sem fermentobatch - escalando um sistema sem fermento
batch - escalando um sistema sem fermentoDouglas Campos
 
Refatoração + Design Patterns em Ruby
Refatoração + Design Patterns em RubyRefatoração + Design Patterns em Ruby
Refatoração + Design Patterns em RubyCássio Marques
 

Andere mochten auch (6)

Aplicacoes para celular com Ruby
Aplicacoes para celular com RubyAplicacoes para celular com Ruby
Aplicacoes para celular com Ruby
 
Abertura do ruby_rails_no_mundo_real_guru_sp
Abertura do ruby_rails_no_mundo_real_guru_spAbertura do ruby_rails_no_mundo_real_guru_sp
Abertura do ruby_rails_no_mundo_real_guru_sp
 
O que há de novo no Rails 3
O que há de novo no Rails 3O que há de novo no Rails 3
O que há de novo no Rails 3
 
batch - escalando um sistema sem fermento
batch - escalando um sistema sem fermentobatch - escalando um sistema sem fermento
batch - escalando um sistema sem fermento
 
BDD & Cucumber
BDD & CucumberBDD & Cucumber
BDD & Cucumber
 
Refatoração + Design Patterns em Ruby
Refatoração + Design Patterns em RubyRefatoração + Design Patterns em Ruby
Refatoração + Design Patterns em Ruby
 

Ähnlich wie Voodoo metaprogramação Ruby

Desenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on RailsDesenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on RailsLucas Caton
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisRogerio Fontes
 
Introdução a Scala [GeekieTalk]
Introdução a Scala [GeekieTalk]Introdução a Scala [GeekieTalk]
Introdução a Scala [GeekieTalk]Nicolau Werneck
 
DDD e PHP - TDC 2012
DDD e PHP - TDC 2012DDD e PHP - TDC 2012
DDD e PHP - TDC 2012Luís Cobucci
 
Orientação a Objetos com Python e UML - XIII FGSL
Orientação a Objetos com Python e UML - XIII FGSLOrientação a Objetos com Python e UML - XIII FGSL
Orientação a Objetos com Python e UML - XIII FGSLGeorge Mendonça
 
Minicurso de Algoritmo de Programação Em Java
Minicurso de Algoritmo de Programação Em JavaMinicurso de Algoritmo de Programação Em Java
Minicurso de Algoritmo de Programação Em JavaAnderson Cirilo Valentim
 
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISCCriando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISCFlávio Lisboa
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Luis Ferreira
 
Oo presentation básica
Oo presentation básicaOo presentation básica
Oo presentation básicaLorena de Souza
 
Esta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com RailsEsta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com Railsismaelstahelin
 
Minicurso de Lógica e Linguagem Java 6.0
Minicurso de Lógica e Linguagem Java 6.0Minicurso de Lógica e Linguagem Java 6.0
Minicurso de Lógica e Linguagem Java 6.0Thiago Dieb
 
3 oo-concepts
3 oo-concepts3 oo-concepts
3 oo-conceptsjorge600
 
Introdução a programação em python d2
Introdução a programação em python d2Introdução a programação em python d2
Introdução a programação em python d2Moises de Paula
 
Delphi Parallel Programming Library
Delphi Parallel Programming LibraryDelphi Parallel Programming Library
Delphi Parallel Programming LibraryMario Guedes
 
Especialização e generalização em java
Especialização e generalização em javaEspecialização e generalização em java
Especialização e generalização em javaDiogo Winck
 

Ähnlich wie Voodoo metaprogramação Ruby (20)

Desenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on RailsDesenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on Rails
 
Java aula 2
Java aula 2Java aula 2
Java aula 2
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everis
 
Minicurso de TDD
Minicurso de TDDMinicurso de TDD
Minicurso de TDD
 
Introdução a Scala [GeekieTalk]
Introdução a Scala [GeekieTalk]Introdução a Scala [GeekieTalk]
Introdução a Scala [GeekieTalk]
 
DDD e PHP - TDC 2012
DDD e PHP - TDC 2012DDD e PHP - TDC 2012
DDD e PHP - TDC 2012
 
Orientação a Objetos com Python e UML - XIII FGSL
Orientação a Objetos com Python e UML - XIII FGSLOrientação a Objetos com Python e UML - XIII FGSL
Orientação a Objetos com Python e UML - XIII FGSL
 
Linguagem Python
Linguagem PythonLinguagem Python
Linguagem Python
 
Minicurso de Algoritmo de Programação Em Java
Minicurso de Algoritmo de Programação Em JavaMinicurso de Algoritmo de Programação Em Java
Minicurso de Algoritmo de Programação Em Java
 
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISCCriando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos
 
Aula python
Aula pythonAula python
Aula python
 
Oo presentation básica
Oo presentation básicaOo presentation básica
Oo presentation básica
 
Esta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com RailsEsta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com Rails
 
Minicurso de Lógica e Linguagem Java 6.0
Minicurso de Lógica e Linguagem Java 6.0Minicurso de Lógica e Linguagem Java 6.0
Minicurso de Lógica e Linguagem Java 6.0
 
3 oo-concepts
3 oo-concepts3 oo-concepts
3 oo-concepts
 
Introdução a programação em python d2
Introdução a programação em python d2Introdução a programação em python d2
Introdução a programação em python d2
 
Delphi Parallel Programming Library
Delphi Parallel Programming LibraryDelphi Parallel Programming Library
Delphi Parallel Programming Library
 
Curso javascript básico
Curso javascript básicoCurso javascript básico
Curso javascript básico
 
Especialização e generalização em java
Especialização e generalização em javaEspecialização e generalização em java
Especialização e generalização em java
 

Voodoo metaprogramação Ruby