Ruby’nin modül sistemi, kod organizasyonu ve yeniden kullanılabilirliği için güçlü bir araçtır. include
ve extend
olmak üzere iki önemli metot, modül işlevselliğini sınıflara dahil etmenizi sağlar, ancak bunu temelde farklı şekillerde yaparlar. Bu makale, aralarındaki farkları netleştirir ve ihtiyaçlarınıza uygun yöntemi seçmenizde size rehberlik eder.
İçindekiler
- Ruby’de
include
‘ı Anlamak - Ruby’de
extend
‘i Anlamak include
veextend
‘i Ne Zaman Kullanmalı- Sonuç
- SSS
Ruby’de include
‘ı Anlamak
include
metodu, bir modülün metotlarını bir sınıfın örneklerine getirir. Sınıftan oluşturulan her nesne bu metotları devralacak ve kullanabilecektir.
module Sayable
def speak(mesaj)
puts mesaj
end
end
class Dog
include Sayable
end
sparky = Dog.new
sparky.speak("Hav hav!") # => Hav hav!
Bu örnekte, sparky
gibi Dog
örnekleri, include
nedeniyle speak
metodunu kazanır.
Ruby’de extend
‘i Anlamak
extend
, bunun tersine, bir modülün metotlarını doğrudan sınıfın kendisine, örneklerine değil, ekler. Bu metotlar sınıfta çağrılabilir ancak bu sınıftan oluşturulan bireysel nesnelerde çağrılamaz.
module Growlable
def growl
puts "Grrrr!"
end
end
class Cat
extend Growlable
end
Cat.growl # => Grrrr!
whiskers = Cat.new
# whiskers.growl # => NoMethodError: undefined method 'growl' for #<Cat:0x...>
Sadece Cat
sınıfı growl
‘u çağırabilir; whiskers
, bir Cat
örneği, çağıramaz.
include
ve extend
‘i Ne Zaman Kullanmalı
Karar tamamen, örnek düzeyinde mi yoksa sınıf düzeyinde mi metotlara ihtiyacınız olduğuna bağlıdır.
include
‘ı kullanın: Sınıfın her nesnesine (örneğine) erişilebilir olması gereken metotlar ekliyorsanız. Bu en yaygın kullanım durumudur. Bireysel nesnelere davranışlar veya işlevler eklemeyi düşünün.extend
‘i kullanın: Sınıfın kendisi üzerinde çalışan metotlar, örneğin sınıf düzeyinde metotlar (örneğin, fabrika metotları) veya sınıf davranışını değiştiren metotlar ekliyorsanız. Bu metotlar genellikle örnek değişkenlerine erişim gerektirmez.
Sonuç
include
ve extend
, Ruby’nin cephanesindeki değerli araçlardır. Ayrı davranışlarını—örnek düzeyi ve sınıf düzeyi metotlar—anlamak, temiz, sürdürülebilir ve verimli kod yazmak için çok önemlidir. Doğru yaklaşımı seçmek, kod tasarımını ve okunabilirliğini önemli ölçüde etkiler.
SSS
- Birden fazla modülü
extend
edebilir miyim? Evet, birden fazla modül genişletmek, metotlarını sınıfa ekler. - Aynı modülü
include
veextend
edebilir miyim? Evet, bu modülden hem örnek hem de sınıf düzeyinde metotlar sağlar. - Modüller aynı ada sahip metotlar tanımlarsa ne olur? Son eklenen veya genişletilen modül kazanır; metodu diğerlerini geçersiz kılar (metot geçersiz kılma).
- Performans etkileri var mı? Performans farklılıkları genellikle ihmal edilebilir düzeydedir. Küçük performans iyileştirmelerinden önce kod tasarımını önceliklendirin.