À quoi servent les modules en Ruby?
sobes.tech IA
Réponse de l'IA
Les modules en Ruby sont utilisés pour deux objectifs principaux:
-
Namespaces (espaces de noms) : Organisation du code pour éviter les conflits de noms. Ils permettent de regrouper des classes, méthodes et constantes liées sous un même nom. Cela aide à éviter la situation où deux classes ou méthodes différentes ont le même nom.
# module_for_namespace.rb module MonFramework class Validateur def valider(données) # logique de validation end end end # autre_fichier.rb # Pour utiliser Validateur de MonFramework: validateur = MonFramework::Validateur.new validateur.valider("des données") -
Mixins (mélanges) : Mécanisme pour partager des fonctionnalités (méthodes) entre plusieurs classes sans utiliser l'héritage classique. Les modules sont inclus dans les classes avec
includeouprepend.include: Les méthodes du module sont disponibles dans les instances de la classe et peuvent être redéfinies dans la classe elle-même. La recherche de méthodes suit l'ordre : classe courante, module inclus, superclasses.prepend: Insère le module dans la chaîne d'héritage avant la classe. Les méthodes du module ont priorité sur celles de la classe.
Exemple d'utilisation de
include:# mixin_module.rb module Loggable def log(message) puts "[LOG] #{message}" end end # class_using_mixin.rb class MaClasse include Loggable # Inclure le module Loggable def traiter_données log("Traitement des données...") # Utilise la méthode du module # autre logique end end obj = MaClasse.new obj.traiter_donnéesExemple d'utilisation de
prepend:# mixin_module.rb module MonModulePrependu def saluer puts "Bonjour du module!" end end # class_with_prepend.rb class MaClassePrepend prepend MonModulePrependu # Le module précède la classe dans la chaîne d'héritage def saluer puts "Bonjour de la classe!" end end obj = MaClassePrepend.new obj.saluer # Affichera "Bonjour du module!" car la méthode du module a priorité
Les modules ne peuvent pas être instanciés (on ne peut pas créer un objet d'un module) et n'ont pas de chaîne d'héritage dans le même sens que les classes.