Junior
Para que são utilizados os módulos em Ruby?
sobes.tech IA
Resposta da IA
Os módulos em Ruby são usados para dois propósitos principais:
-
Namespaces (Espaços de nomes): Organização do código para evitar conflitos de nomes. Permitem agrupar classes, métodos e constantes relacionados sob um mesmo nome. Isso ajuda a evitar situações em que duas classes ou métodos diferentes tenham o mesmo nome.
# module_for_namespace.rb module MinhaFramework class Validador def validar(dados) # lógica de validação end end end # outro_ficheiro.rb # Para usar Validador de MinhaFramework: validador = MinhaFramework::Validador.new validador.validar("alguns dados") -
Mixins (Misturas): Mecanismo para compartilhar funcionalidades (métodos) entre várias classes sem usar herança clássica. Os módulos são incluídos nas classes usando
includeouprepend.include: Os métodos do módulo estão disponíveis nas instâncias da classe e podem ser sobrescritos na própria classe. A busca por métodos segue a ordem: classe atual, módulo incluído, superclasses.prepend: Insere o módulo na cadeia de herança antes da classe. Os métodos do módulo têm prioridade sobre os métodos da classe.
Exemplo de uso de
include:# mixin_module.rb module Loggable def log(mensagem) puts "[LOG] #{mensagem}" end end # class_using_mixin.rb class MinhaClasse include Loggable # Inclui o módulo Loggable def processar_dados log("Processando dados...") # Usa método do módulo # resto da lógica end end obj = MinhaClasse.new obj.processar_dadosExemplo de uso de
prepend:# mixin_module.rb module MeuModuloPrependido def cumprimentar puts "Olá do módulo!" end end # class_with_prepend.rb class MinhaClassePrepend prepend MeuModuloPrependido # O módulo precede a classe na cadeia de herança def cumprimentar puts "Olá da classe!" end end obj = MinhaClassePrepend.new obj.cumprimentar # Mostrará "Olá do módulo!" porque o método do módulo tem prioridade
Os módulos não podem ser instanciados (não é possível criar um objeto de um módulo) e não possuem uma cadeia de herança no mesmo sentido que as classes.