Peut-on réaliser la même fonctionnalité avec une classe qu'avec un module?
sobes.tech IA
Réponse de l'IA
En Ruby, les modules (module) et les classes (class) ont des objectifs différents, bien qu'ils puissent tous deux contenir des méthodes et des constantes.
-
Modules sont destinés à regrouper des méthodes, des constantes et d'autres modules sans possibilité de créer des instances. Ils sont souvent utilisés pour des mixins (inclure des fonctionnalités dans des classes via
includeouextend). -
Classes permettent de créer des objets (instances), ont des constructeurs et peuvent hériter.
Il est possible d'implémenter la fonctionnalité d'un module dans une classe, mais cela signifierait qu'il faut créer une instance de la classe pour accéder aux méthodes, ce qui n'est pas toujours pratique ou logique. Les modules permettent d'ajouter des méthodes directement dans l'espace de noms ou dans la classe sans créer d'objet.
Exemple :
module Greetings
def greet
puts "Hello!"
end
end
class Person
include Greetings
end
Person.new.greet # => Hello!
Si vous essayez de remplacer un module par une classe, pour appeler greet, vous devrez créer un objet :
class Greetings
def greet
puts "Hello!"
end
end
g = Greetings.new
g.greet # => Hello!
Ainsi, bien que cela soit techniquement possible, l'utilisation de modules pour les mixins et le regroupement de méthodes est plus sémantiquement correcte et pratique.