Junior
За шта се користе модули у Ruby-ју?
sobes.tech АИ
Одговор од АИ
Moduli u Rubyju se koriste za dva glavna cilja:
-
Namespaces (Prostori imena): Organizacija koda radi sprečavanja konflikata imena. Omogućavaju grupisanje povezanih klasa, metoda i konstanti pod jednim imenom. Ovo pomaže da se izbegnu situacije gde dve različite klase ili metode imaju isto ime.
# module_for_namespace.rb module MojFramework class Validator def validate(podaci) # logika validacije end end end # drugi_fajl.rb # Za korišćenje Validatora iz MojFramework: validator = MojFramework::Validator.new validator.validate("neki podaci") -
Mixins (Mešavine): Mehanizam za deljenje funkcionalnosti (metoda) između više klasa bez korišćenja klasičnog nasleđivanja. Moduli se uključuju u klase pomoću
includeiliprepend.include: Metode modula su dostupne u instancama klase i mogu biti prepisane u samoj klasi. Pretraga metoda prati redosled: trenutna klasa, uključen modul, superklase.prepend: Umeće modul pre klase u lanac nasleđivanja. Metode modula imaju prioritet nad metodama klase.
Primer korišćenja
include:# mixin_module.rb module Loggable def log(poruka) puts "[LOG] #{poruka}" end end # class_using_mixin.rb class MojaKlasa include Loggable # Uključujemo modul Loggable def obrada_podataka log("Obrada podataka...") # Koristimo metodu iz modula # ostala logika end end objekat = MojaKlasa.new objekat.obrada_podatakaPrimer korišćenja
prepend:# mixin_module.rb module MojPrependModul def pozdrav puts "Zdravo iz modula!" end end # class_with_prepend.rb class MojaPrependKlasa prepend MojPrependModul # Modul prethodi klasi u lancu nasleđivanja def pozdrav puts "Zdravo iz klase!" end end objekat = MojaPrependKlasa.new objekat.pozdrav # Ispisaće "Zdravo iz modula!" jer metoda iz modula ima prioritet
Moduli se ne mogu instancirati (ne može se napraviti objekat modula) i nemaju lanac nasleđivanja u istom smislu kao klase.