Definição dinâmica de métodos
Aprenda a definir e chamar métodos dinamicamente usando define_method e method_missing.
Definição dinâmica de métodos é uma aula grátis de Ruby Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Ruby Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Ruby Academy inclui 4 aulas no total.
Criando métodos dinamicamente
Definição dinâmica de métodos
No Ruby, os métodos podem ser criados dinamicamente em tempo de execução.
Isso permite escrever um código mais flexível e reutilizável.

Usando define_method
Usando define_method
O método define_method permite definir métodos dinamicamente.
class Person
define_method(:greet) { puts 'Hello!' }
end
p = Person.new
p.greetUsando define_method com parâmetros
Usando define_method com parâmetros
Você pode passar argumentos para métodos criados dinamicamente.
class Person
define_method(:greet) { |name| puts "Hello, #{name}!" }
end
p = Person.new
p.greet('Alice')Usando method_missing
Usando method_missing
O método method_missing intercepta chamadas a métodos não definidos.
class Person
def method_missing(name, *args)
puts "Method '#{name}' is missing!"
end
end
p = Person.new
p.unknown_methodTratando method_missing dinamicamente
Tratando method_missing dinamicamente
Você pode usar method_missing para definir um tratamento flexível de métodos.
class DynamicPerson
def method_missing(name, *args)
if name.to_s.start_with?('say_')
puts "You asked me to say: #{name.to_s.split('_')[1..-1].join(' ')}"
else
super
end
end
end
p = DynamicPerson.new
p.say_hello_worldSubstituindo respond_to_missing?
Substituindo respond_to_missing?
Para tratar verificações de métodos corretamente, substitua respond_to_missing?.
class DynamicPerson
def method_missing(name, *args)
if name.to_s.start_with?('say_')
puts "Saying: #{name.to_s.split('_')[1..-1].join(' ')}"
else
super
end
end
def respond_to_missing?(name, include_private = false)
name.to_s.start_with?('say_') || super
end
end
p = DynamicPerson.new
puts p.respond_to?(:say_hello)Usando method_missing para métodos dinâmicos de leitura e atribuição
Usando method_missing para métodos dinâmicos de leitura e atribuição
Você pode criar atributos dinâmicos usando method_missing.
class DynamicPerson
def initialize
@data = {}
end
def method_missing(name, *args)
attribute = name.to_s.sub(/=$/, '')
if name.to_s.end_with?('=')
@data[attribute] = args.first
else
@data[attribute]
end
end
end
p = DynamicPerson.new
p.name = 'Alice'
puts p.nameRiscos de segurança do method_missing
Riscos de segurança do method_missing
Usar method_missing de maneira inadequada pode introduzir riscos:
- Comportamento inesperado ao lidar com métodos desconhecidos.
- Possíveis problemas de desempenho devido a buscas excessivas por métodos.
- Vulnerabilidades de segurança se combinado com a entrada do usuário.
Recapitulação dos métodos dinâmicos
Parabéns!
Você aprendeu a definir e chamar métodos dinamicamente em Ruby.
Em seguida, você explorará classes abertas e alteração dinâmica.

Perguntas Frequentes
A aula “Definição dinâmica de métodos” é grátis?
Sim — o texto completo de “Definição dinâmica de métodos” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Ruby Academy, atualize para CoddyKit PRO. O curso de Ruby Academy inclui 4 aulas no total.
O que vou aprender em “Definição dinâmica de métodos”?
Aprenda a definir e chamar métodos dinamicamente usando define_method e method_missing. Você pratica Ruby Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Ruby Academy?
Nenhuma experiência prévia é necessária. Ruby Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Definição dinâmica de métodos”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Ruby Academy?
Sim. Cada aula de Ruby Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- O que é metaprogramação?
- Definição dinâmica de métodos
- Classes abertas e monkey patching
- Uso de send e eval