Sobes.tech
Middle

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 include ou extend).

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