É possível implementar a mesma funcionalidade numa classe que num módulo?
sobes.tech IA
Resposta da IA
Em Ruby, os módulos (module) e as classes (class) têm propósitos diferentes, embora ambos possam conter métodos e constantes.
-
Módulos destinam-se a agrupar métodos, constantes e outros módulos sem a capacidade de criar instâncias. São frequentemente usados para mixins (incluir funcionalidades em classes através de
includeouextend). -
Classes permitem criar objetos (instâncias), têm construtores e podem ser herdadas.
Pode-se implementar a funcionalidade de um módulo numa classe, mas isso significaria que, para aceder aos métodos, é necessário criar uma instância da classe, o que nem sempre é conveniente ou lógico. Os módulos permitem adicionar métodos diretamente ao espaço de nomes ou à classe sem criar um objeto.
Exemplo:
module Greetings
def greet
puts "Hello!"
end
end
class Person
include Greetings
end
Person.new.greet # => Hello!
Se tentar substituir um módulo por uma classe, para chamar greet, precisa criar um objeto:
class Greetings
def greet
puts "Hello!"
end
end
g = Greetings.new
g.greet # => Hello!
Portanto, embora seja tecnicamente possível, usar módulos para mixins e agrupamento de métodos é mais semânticamente correto e conveniente.