Définition dynamique de méthodes
Apprenez à définir et à appeler des méthodes dynamiquement à l’aide de define_method et method_missing.
Définition dynamique de méthodes est une leçon Ruby Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Ruby Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Ruby Academy comprend 4 leçons au total.
Créer des méthodes dynamiquement
Définition dynamique de méthodes
Dans Ruby, les méthodes peuvent être créées dynamiquement au moment de l’exécution.
Cela permet d’écrire du code plus flexible et réutilisable.

Utiliser define_method
Utiliser define_method
La méthode define_method permet de définir des méthodes dynamiquement.
class Person
define_method(:greet) { puts 'Hello!' }
end
p = Person.new
p.greetUtiliser define_method avec des paramètres
Utiliser define_method avec des paramètres
Vous pouvez transmettre des arguments aux méthodes créées dynamiquement.
class Person
define_method(:greet) { |name| puts "Hello, #{name}!" }
end
p = Person.new
p.greet('Alice')Utiliser method_missing
Utiliser method_missing
La méthode method_missing intercepte les appels à des méthodes non définies.
class Person
def method_missing(name, *args)
puts "Method '#{name}' is missing!"
end
end
p = Person.new
p.unknown_methodGérer method_missing dynamiquement
Gérer method_missing dynamiquement
Vous pouvez utiliser method_missing pour définir une gestion flexible des méthodes.
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_worldRedéfinir respond_to_missing?
Redéfinir respond_to_missing?
Pour gérer correctement les vérifications de méthodes, redéfinissez 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)Utiliser method_missing pour créer des accesseurs et des mutateurs dynamiques
Utiliser method_missing pour créer des accesseurs et des mutateurs dynamiques
Vous pouvez créer des attributs dynamiques avec 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.nameRisques de sécurité de method_missing
Risques de sécurité de method_missing
Une utilisation incorrecte de method_missing peut introduire des risques :
- Un comportement inattendu lors de la gestion de méthodes inconnues.
- Des problèmes de performances potentiels dus à des recherches de méthodes excessives.
- Des failles de sécurité si cette fonctionnalité est combinée à des entrées utilisateur.
Récapitulatif des méthodes dynamiques
Félicitations !
Vous avez appris à définir et à appeler des méthodes dynamiquement en Ruby.
Ensuite, vous découvrirez les classes ouvertes et la modification à chaud.

Questions Fréquemment Posées
La leçon « Définition dynamique de méthodes » est-elle gratuite ?
Oui — le texte complet de « Définition dynamique de méthodes » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Ruby Academy, passe à CoddyKit PRO. Le cours Ruby Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Définition dynamique de méthodes » ?
Apprenez à définir et à appeler des méthodes dynamiquement à l’aide de define_method et method_missing. Tu pratiques Ruby Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Ruby Academy ?
Aucune expérience préalable n'est requise. Ruby Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « Définition dynamique de méthodes » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Ruby Academy ?
Oui. Chaque leçon Ruby Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Qu’est-ce que la métaprogrammation ?
- Définition dynamique de méthodes
- Classes ouvertes et modification à chaud
- Utilisation de send et eval