Junior
Na čo sa používajú moduly v Ruby?
sobes.tech AI
Odpoveď od AI
Moduly v Ruby sa používajú na dva hlavné účely:
-
Namespace (Priestor mien): Organizácia kódu na zabránenie konfliktom mien. Umožňujú skupinovať súvisiace triedy, metódy a konštanty pod jedným menom. To pomáha vyhnúť sa situácii, keď dva rôzne triedy alebo metódy majú rovnaké meno.
# module_for_namespace.rb module MyFramework class Validator def validate(data) # logika validácie end end end # another_file.rb # Na použitie Validator z MyFramework: validator = MyFramework::Validator.new validator.validate("nejaké dáta") -
Mixins (Miešanie): Mechanizmus na spoločné používanie funkčnosti (metód) viacerými triedami bez použitia klasického dedičstva. Moduly sa zahrňujú do tried pomocou
includealeboprepend.include: Metódy modulu sa stávajú dostupnými v inštanciách triedy a môžu byť prepísané v samotnej triede. Vyhľadávanie metód prebieha v nasledovnom poradí: aktuálna trieda, zahrnutý modul, supertriedy.prepend: Vloží modul do reťazca dedičstva pred triedu. Metódy modulu majú prioritu pred metódami triedy.
Príklad použitia
include:# mixin_module.rb module Loggable def log(message) puts "[LOG] #{message}" end end # class_using_mixin.rb class MyClass include Loggable # Zahrnieme modul Loggable def process_data log("Spracovanie dát...") # Používame metódu z modulu # zvyšok logiky end end obj = MyClass.new obj.process_dataPríklad použitia
prepend:# mixin_module.rb module MyPrependedModule def greet puts "Ahoj z modulu!" end end # class_with_prepend.rb class MyPrependClass prepend MyPrependedModule # Modul bude pred triedou v reťazci dedičstva def greet puts "Ahoj z triedy!" end end obj = MyPrependClass.new obj.greet # Vypíše "Ahoj z modulu!", pretože metóda z modulu má prioritu
Moduly nemôžu byť inštancované (nie je možné vytvoriť objekt modulu) a nemajú reťazec dedičstva v rovnakom zmysle ako triedy.