Sobes.tech
Junior

Ruby'de modüller ne için kullanılır?

sobes.tech yapay zeka

AI'dan gelen yanıt

Ruby'de modüller iki ana amaç için kullanılır:

  1. Namespaces (İsim alanları): Kodun düzenlenmesi, isim çatışmalarını önlemek için. İlgili sınıflar, metodlar ve sabitleri tek bir isim altında gruplayarak karışıklığı engeller. Bu, iki farklı sınıf veya metodun aynı isme sahip olmasını önler.

    # module_for_namespace.rb
    module BenFramework
      class Doğrulayıcı
        def doğrula(veri)
          # doğrulama mantığı
        end
      end
    end
    
    # başka_bir_dosya.rb
    # BenFramework'ten Doğrulayıcı'yı kullanmak için:
    doğrulayıcı = BenFramework::Doğrulayıcı.new
    doğrulayıcı.dogrula("bazı veriler")
    
  2. Mixins (Karışımlar): Birden fazla sınıf arasında fonksiyonellik (metodlar) paylaşmak için mekanizma. Modüller, include veya prepend kullanılarak sınıflara dahil edilir.

    • include: Modül metodları, sınıf örneklerinde kullanılabilir ve sınıf içinde yeniden tanımlanabilir. Metod arama sırası: mevcut sınıf, dahil edilen modül, üst sınıflar.
    • prepend: Modülü, sınıfın önüne yerleştirir. Modül metodları, sınıf metodlarından önceliklidir.

    include kullanım örneği:

    # mixin_module.rb
    module Loggable
      def log(mesaj)
        puts "[LOG] #{mesaj}"
      end
    end
    
    # class_using_mixin.rb
    class BenimClass
      include Loggable # Loggable modülünü dahil et
    
      def veri_isleme
        log("Veri işleniyor...") # Modülden metod kullan
        # diğer işlemler
      end
    end
    
    nesne = BenimClass.new
    nesne.veri_isleme
    

    prepend kullanımı örneği:

    # mixin_module.rb
    module BenimPrependModülüm
      def selamla
        puts "Modülden merhaba!"
      end
    end
    
    # class_with_prepend.rb
    class BenimPrependClass
      prepend BenimPrependModülüm # Modül, sınıfın önünde yer alır
    
      def selamla
        puts "Sınıftan merhaba!"
      end
    end
    
    nesne = BenimPrependClass.new
    nesne.selamla # "Modülden merhaba!" yazdırır, çünkü modüldeki metod önceliklidir
    

Modüller örneklenemez (nesne oluşturulamaz) ve sınıflar gibi kalıtım zinciri yoktur.