0Pricing
Ruby Academy · Ders

prepend ve Yöntem Çözümleme

Ata zincirleri

prepend ve Yöntem Çözümleme, CoddyKit'te ücretsiz bir Ruby Academy dersidir. Bu, 4 dersinin 4. 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.

Ata Zincirleri

Bir yöntem çağırdığınızda Ruby, ata zinciri adı verilen bir listede arama yapar. Eşleşen ilk tanım kullanılır. Bu zinciri anlamak, karışımlar ile kalıtımın nasıl etkileştiğini açıklar.

class Animal; end
class Dog < Animal; end
p Dog.ancestors

Yöntem Arama Sırası

Ruby önce nesnenin sınıfında, ardından dahil edilen modüllerinde, sonra üst sınıfında ve zincirde yukarı doğru devam ederek yöntemi bulana kadar arama yapar.

module M
  def hello; "from module"; end
end
class C
  include M
  def hello; "from class"; end
end
puts C.new.hello

include Sınıfın Altında Yer Alır

include edilen bir modül, zincirde sınıfın hemen altında yer alır. Sınıfın kendi yöntemleri, modülün yöntemlerine göre önceliklidir.

module M; end
class C
  include M
end
p C.ancestors  # [C, M, Object, ...]

Başa Ekleme ile Tanışın

prepend, zincirde bir modülü sınıfın üstüne yerleştirir. Artık modülün yöntemleri, sınıfın kendi yöntemlerinden önce, yani ilk olarak bulunur.

module M
  def hello; "from module"; end
end
class C
  prepend M
  def hello; "from class"; end
end
puts C.new.hello

Zincirde Başa Ekleme

Ataları inceleyerek prepend'in modülü sınıftan önce yerleştirdiğini görün.

module M; end
class C
  prepend M
end
p C.ancestors  # [M, C, Object, ...]

Başa Eklenen Modülden Üst Sınıfa Çağrı

Başa eklenen modül önce çalıştığı için, super çağrısıyla asıl yönteme ulaşarak sınıf yöntemini sarmalayabilir. Bu, davranışa ekleme yapmak için idealdir.

module Logged
  def save
    puts "before save"
    result = super
    puts "after save"
    result
  end
end
class Record
  prepend Logged
  def save
    puts "saving record"
    :ok
  end
end
p Record.new.save

Karışımlarda Üst Sınıf Çağrısı

super, ata zincirini izler. Dahil edilen bir modülden super üst sınıfa ulaşır; başa eklenen bir modülden ise doğrudan sınıfa ulaşır.

module Polite
  def greet; "Hi! " + super; end
end
class Person
  prepend Polite
  def greet; "I am here."; end
end
puts Person.new.greet

Düzenlemeden Sarmalama

prepend, özgün sınıf kodunu değiştirmeden mevcut yöntemlerin çevresine davranış eklemenize olanak tanır; bu, maymun yaması uygulamaya temiz bir alternatiftir.

module Timing
  def compute(n)
    puts "start"
    super
  end
end
class Calc
  prepend Timing
  def compute(n); n * n; end
end
puts Calc.new.compute(5)

Birden Çok Modülün Sırası

Birden çok modül dahil edildiğinde, son dahil edilen modül sınıfa en yakın konuma yerleşir ve ilk olarak aranır.

module A; def who; "A"; end; end
module B; def who; "B"; end; end
class C
  include A
  include B
end
puts C.new.who  # B wins (included last)
p C.ancestors

include ile Başa Eklemenin Özeti

Yan yana:

  • include M: zincir [Class, M, ...] şeklindedir — sınıf yöntemleri önceliklidir.
  • prepend M: zincir [M, Class, ...] şeklindedir — modül yöntemleri önceliklidir ve sınıfa super ile ulaşabilir.
module M; end
class Inc; include M; end
class Pre; prepend M; end
p Inc.ancestors
p Pre.ancestors

Hepsini Birleştirme

Yöntem çözümlemesi ata zincirini izler:

  • Sınıf yöntemleri, dahil edilen modüllere göre önceliklidir.
  • Başa eklenen modüller sınıfa göre önceliklidir.
  • super, zincirde bir adım yukarı çıkar.
module Cap
  def name; super.capitalize; end
end
class User
  prepend Cap
  def name; "ada"; end
end
puts User.new.name

Kısa Kontrol

Yöntem çözümlemeyle ilgili anlayışınızı test edin.

Özet

Yöntem çözümlemesini öğrendiniz:

  • Ruby, ata zincirini yukarıdan aşağıya tarar.
  • include sınıfın altında, prepend ise üstünde yer alır.
  • super, zincirdeki bir sonraki tanıma ulaşır.
  • prepend, yöntemleri temiz bir şekilde sarmalar.
module Loud
  def speak; super.upcase; end
end
class Bot
  prepend Loud
  def speak; "beep"; end
end
puts Bot.new.speak

Sıkça Sorulan Sorular

“prepend ve Yöntem Çözümleme” dersi ücretsiz mi?

Evet — “prepend ve Yöntem Çözümleme” 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.

“prepend ve Yöntem Çözümleme” dersinde ne öğreneceğim?

Ata zincirleri 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 4. dersidir.

“prepend ve Yöntem Çözümleme” 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.

Bu kursun tüm dersleri

  1. Modüller Tanımlama
  2. include ve extend
  3. Comparable ve Enumerable
  4. prepend ve Yöntem Çözümleme
← Ruby Academy Sayfasına Dön