Sobes.tech
Junior

Ruby-də modullar nə üçün istifadə olunur?

sobes.tech Süni İntellekt

AI-dan cavab

Ruby-də modullar iki əsas məqsəd üçün istifadə olunur:

  1. Namespaces (Ad sahələri): Kodun təşkili, ad konfliktlərinin qarşısını almaq üçün. Onlar əlaqəli sinifləri, metodları və sabitləri bir ad altında qruplaşdırmağa imkan verir. Bu, iki fərqli sinif və ya metodun eyni adı paylaşması vəziyyətini qarşısını alır.

    # module_for_namespace.rb
    module MənimFramework
      class Doğrulayıcı
        def doğrula(məlumatlar)
          # doğrulama məntiqi
        end
      end
    end
    
    # başqa_fayl.rb
    # MənimFramework-dən Doğrulayıcı istifadə etmək üçün:
    doğrulayıcı = MənimFramework::Doğrulayıcı.new
    doğrulayıcı.dogrula("bəziləri məlumatlar")
    
  2. Mixins (Qarışımlar): Klassik irsiyyət istifadə etmədən bir neçə sinif arasında funksionallığın (metodların) paylaşılması mexanizmi. Modullar include və ya prepend vasitəsilə siniflərə daxil edilir.

    • include: Modul metodları sinif nümunələrində mövcuddur və sinif daxilində yenidən təyin oluna bilər. Metodların axtarış sırası: cari sinif, daxil edilmiş modul, super siniflər.
    • prepend: Modulu irsiyyət zəncirində sinifdən əvvəl yerləşdirir. Modul metodları sinif metodlarından üstün olur.

    include istifadə nümunəsi:

    # mixin_module.rb
    module Loggable
      def log(mesaj)
        puts "[LOG] #{mesaj}"
      end
    end
    
    # class_using_mixin.rb
    class MənimSinifim
      include Loggable # Modulu daxil et
    
      def məlumatı_emal et
        log("Məlumat işlənir...") # Modul metodundan istifadə et
        # digər məntiq
      end
    end
    
    ob = MənimSinifim.new
    ob.məlumatı_emal et
    

    prepend istifadə nümunəsi:

    # mixin_module.rb
    module MənimPrependModul
      def salam
        puts "Moduldan salam!"
      end
    end
    
    # class_with_prepend.rb
    class MənimPrependSinif
      prepend MənimPrependModul # Modul sinifdən əvvəl irsiyyət zəncirində yerləşir
    
      def salam
        puts "Sinifdən salam!"
      end
    end
    
    ob = MənimPrependSinif.new
    ob.salam # "Moduldan salam!" çap edəcək, çünki modul metoduna üstünlük verilir
    

Modullar nümunə edilə bilməz (obyekt yaradıla bilməz) və siniflər kimi irsiyyət zənciri yoxdur.