Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Indrodução à reflexão e metaprogramação em ruby

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers. →

Indrodução à reflexão e metaprogramação em ruby

Uma pequena introdução à reflexão e metaprogramação em ruby utilizando alguns simples exemplos e um caso de uso prático

Avatar for Jonathan Bruno

Jonathan Bruno

June 23, 2018

More Decks by Jonathan Bruno

Other Decks in Technology

Transcript

  1. Reflexão É a possibilidade de examinar propriedades e invocar comportamento

    de forma dinâmica em tempo de execução (runtime) ‘
  2. • methods • public_methods • private_methods • instance_variables (get /

    set) • class_variables (get / set) • send • ... Reflexão
  3. methods irb(main):041:0> Object.new .methods => [:instance_of?, :public_send, :instance_variable_get, :instance_variable_set, :instance_variable_defined?,

    :remove_instance_variable, :private_methods, :kind_of?, :instance_variables, :tap, :is_a?, :extend, :to_enum, :enum_for, :<=>, :===, :=~, :!~, :eql?, :respond_to?, :freeze, :inspect, :display, :object_id, :send, :to_s, :method, :public_method, :singleton_method, :define_singleton_method, :nil?, :hash, :class, :singleton_class, :clone, :dup, :itself, :taint, :tainted?, :untaint, :untrust, :trust, :untrusted?, :methods, :protected_methods, :frozen?, :public_methods, :singleton_methods, :!, :==, :!=, :__send__, :equal?, :instance_eval, :instance_exec, :__id__]
  4. methods irb(main):041:0> Object.new .methods => [:instance_of?, :public_send, :instance_variable_get, :instance_variable_set, :instance_variable_defined?,

    :remove_instance_variable, :private_methods, :kind_of?, :instance_variables, :tap, :is_a?, :extend, :to_enum, :enum_for, :<=>, :===, :=~, :!~, :eql?, :respond_to?, :freeze, :inspect, :display, :object_id, :send, :to_s, :method, :public_method, :singleton_method, :define_singleton_method, :nil?, :hash, :class, :singleton_class, :clone, :dup, :itself, :taint, :tainted?, :untaint, :untrust, :trust, :untrusted?, :methods, :protected_methods, :frozen?, :public_methods, :singleton_methods, :!, :==, :!=, :__send__, :equal?, :instance_eval, :instance_exec, :__id__]
  5. Metaprogramação Metaprogramação é um termo usado para definir um programa,

    ou uma rotina, que manipula o próprio programa (ou outro, tanto faz) em tempo de execução. Ou seja, um programa que programa.
  6. Open Class In Ruby, classes are never closed: you can

    always add methods to an existing class.