include ve extend
Davranış ekleme
include ve extend, CoddyKit'te ücretsiz bir Ruby Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Ruby Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Ruby Academy kursu toplamda 4 dersten oluşur.
Davranışı Karışıma Dâhil Etme
Modüllerin asıl gücü, kalıtım kullanmadan metotları sınıflar arasında paylaşan karışımdır. Bunun için kullanılan iki temel araç include ve extend ifadeleridir.
module Walkable
def walk
"#{name} is walking"
end
end
class Person
include Walkable
attr_reader :name
def initialize(name)
@name = name
end
end
puts Person.new("Ada").walkinclude Örnek Metotları Ekler
include, bir modülün metotlarını örnek metotları olarak karışıma dâhil eder. Sınıfın her nesnesi bu metotları kazanır.
module Sayable
def say(msg)
"#{msg}!"
end
end
class Dog
include Sayable
end
puts Dog.new.say("Woof")Sınıflar Arasında Yeniden Kullanım
Tek bir modül, ortak bir üst sınıf olmadan birbiriyle ilgisiz birçok sınıfa dâhil edilerek davranış paylaşabilir.
module Timestamped
def stamp
"created"
end
end
class Post; include Timestamped; end
class Comment; include Timestamped; end
puts Post.new.stamp
puts Comment.new.stampextend Sınıf Metotları Ekler
extend, bir modülün metotlarını sınıf metotları olarak (sınıf nesnesinin kendisi üzerindeki metotlar olarak) karışıma dâhil eder.
module Findable
def find(id)
"Finding record #{id}"
end
end
class User
extend Findable
end
puts User.find(42)Bir Nesne Üzerinde extend
Yalnızca tek bir nesnenin metotları kazanması ve diğerlerinin değişmeden kalması için o nesne üzerinde extend kullanabilirsiniz.
module Admin
def privileges
"all access"
end
end
user = Object.new
user.extend(Admin)
puts user.privilegesinclude ve extend Karşılaştırması
Aradaki ayrımı unutmayın:
include=> metotlar örnek metotları olur.extend=> metotlar sınıf/nesne metotları olur.
module Helper
def help; "helping"; end
end
class A; include Helper; end
class B; extend Helper; end
puts A.new.help
puts B.helpModüller Ana Nesnenin Metotlarını Görür
Karışıma dâhil edilen bir metot, onu barındıran nesnenin bağlamında çalışır; bu nedenle nesnenin kendi metotlarını çağırabilir ve verilerine erişebilir.
module Describable
def describe
"I am #{role}"
end
end
class Worker
include Describable
def role; "a worker"; end
end
puts Worker.new.describeincluded Kancası
Bir modül dâhil edildiğinde kodu otomatik olarak çalıştırmak için self.included(base) tanımlayın. Klasik bir kullanım, aynı anda sınıf metotları eklemektir.
module Trackable
def self.included(base)
puts "Trackable added to #{base}"
end
end
class Order
include Trackable
endÜyeliği Denetleme
is_a? ve ancestors, dâhil edilen bir modülün nesnenin tür zincirinin parçası hâline geldiğini gösterir.
module Flyable; end
class Bird; include Flyable; end
b = Bird.new
puts b.is_a?(Flyable)
p Bird.ancestorsBirden Çok Karışımı Birleştirme
Bir sınıf, birçok küçük ve odaklanmış parçadan davranış oluşturmak için birden fazla modülü dâhil edebilir.
module Swimmable; def swim; "swimming"; end; end
module Runnable; def run; "running"; end; end
class Athlete
include Swimmable
include Runnable
end
a = Athlete.new
puts a.swim
puts a.runHepsini Bir Araya Getirme
Karışımlar davranışı esnek biçimde paylaşır:
- Örnek metotları için
include. - Sınıf veya tek nesne metotları için
extend. - Karışıma dâhil edilen metotlar, onları barındıran nesnenin bağlamında çalışır.
- Birçok küçük modülü birleştirin.
module Greet
def hi; "hi from #{self.class}"; end
end
class Cat; include Greet; end
puts Cat.new.hiHızlı Kontrol
include ve extend ile ilgili anlayışınızı test edin.
Özet
Karışımları öğrendiniz:
include=> örnek metotları.extend=> sınıf veya tek nesne metotları.- Karışıma dâhil edilen metotlar, onları barındıran nesnenin bağlamında çalışır.
includedkancası, dâhil etme sırasında çalışır.
module Loud
def shout(s); s.upcase; end
end
class Speaker; include Loud; end
puts Speaker.new.shout("hello")Sıkça Sorulan Sorular
“include ve extend” dersi ücretsiz mi?
Evet — “include ve extend” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Ruby Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Ruby Academy kursu toplamda 4 dersten oluşur.
“include ve extend” dersinde ne öğreneceğim?
Davranış ekleme Ruby Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Ruby Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Ruby Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“include ve extend” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Ruby Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Ruby Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.