0Pricing
Ruby Academy · Leçon

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.

Définition dynamique de méthodes — illustration 1

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.greet

Utiliser 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_method

Gé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_world

Redé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.name

Risques 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.

Définition dynamique de méthodes — illustration 10

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

  1. Qu’est-ce que la métaprogrammation ?
  2. Définition dynamique de méthodes
  3. Classes ouvertes et modification à chaud
  4. Utilisation de send et eval
← Retour à Ruby Academy