Junior
K čemu slouží moduly v Ruby?
sobes.tech AI
Odpověď od AI
Moduly v Ruby se používají pro dva hlavní účely:
-
Namespaces (Prostory jmen): Organizace kódu k zabránění konfliktům jmen. Umožňují seskupit související třídy, metody a konstanty pod jedno jméno. To pomáhá zabránit situacím, kdy dvě různé třídy nebo metody mají stejné jméno.
# module_for_namespace.rb module MůjFramework class Validátor def validovat(data) # logika validace end end end # jiný_soubor.rb # Pro použití Validátoru z MůjFramework: validátor = MůjFramework::Validátor.new validátor.validovat("nějaká data") -
Mixins (Směsi): Mechanismus pro sdílení funkčnosti (metod) mezi více třídami bez použití klasického dědičnosti. Moduly jsou vkládány do tříd pomocí
includeneboprepend.include: Metody modulu jsou dostupné v instancích třídy a mohou být přepsány ve třídě. Vyhledávání metod následuje pořadí: aktuální třída, vložený modul, nadtřídy.prepend: Vkládá modul před třídu do řetězce dědičnosti. Metody modulu mají přednost před metodami třídy.
Příklad použití
include:# mixin_module.rb module Loggable def log(zpráva) puts "[LOG] #{zpráva}" end end # class_using_mixin.rb class MojeTřída include Loggable # Včlenění modulu Loggable def zpracovat_data log("Zpracovávám data...") # Použití metody z modulu # další logika end end objekt = MojeTřída.new objekt.zpracovat_dataPříklad použití
prepend:# mixin_module.rb module MůjPrependModul def pozdrav puts "Ahoj z modulu!" end end # class_with_prepend.rb class MůjPrependTřída prepend MůjPrependModul # Modul předchází třídě v řetězci dědičnosti def pozdrav puts "Ahoj z třídy!" end end objekt = MůjPrependTřída.new objekt.pozdrav # Vytiskne: "Ahoj z modulu!" protože metoda z modulu má prioritu
Moduly nelze instanciovat (nelze vytvořit objekt modulu) a nemají řetězec dědičnosti ve stejném smyslu jako třídy.