0Pricing
Ruby Academy · Pelajaran

prepend dan Resolusi Method

Rantai leluhur.

prepend dan Resolusi Method adalah pelajaran Ruby Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Ruby Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Ruby Academy mencakup 4 pelajaran total.

Rantai Leluhur

Saat Anda memanggil metode, Ruby mencari daftar yang disebut rantai leluhur. Definisi pertama yang cocok akan digunakan. Memahami rantai ini menjelaskan cara modul campuran dan pewarisan saling berinteraksi.

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

Urutan Pencarian Metode

Ruby pertama-tama mencari di kelas objek, lalu di modul yang disertakan, kemudian di kelas induknya, dan seterusnya menyusuri rantai sampai menemukan metode tersebut.

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

include Berada di Bawah Kelas

Modul yang disertakan dengan include berada tepat di bawah kelas dalam rantai. Metode milik kelas lebih diprioritaskan daripada metode milik modul.

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

Mengenal Penyisipan Modul

prepend menyisipkan modul di atas kelas dalam rantai. Kini metode modul ditemukan lebih dahulu, sebelum metode milik kelas.

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

Penyisipan dalam Rantai

Periksa leluhur untuk melihat bahwa prepend menempatkan modul sebelum kelas.

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

super dari Modul yang Disisipkan

Karena modul yang disisipkan dijalankan lebih dahulu, modul tersebut dapat membungkus metode kelas dengan memanggil super untuk mencapai metode aslinya. Ini sangat cocok untuk menambahkan lapisan pada perilaku.

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

super dalam Modul Campuran

super mengikuti rantai leluhur. Dari modul yang disertakan, super mencapai kelas induk; dari modul yang disisipkan, super mencapai kelas itu sendiri.

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

Membungkus Tanpa Mengedit

prepend memungkinkan Anda menambahkan perilaku di sekitar metode yang sudah ada tanpa mengubah kode kelas asli, sebagai alternatif yang rapi dibandingkan modifikasi langsung pada kelas.

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)

Urutan Beberapa Modul

Jika beberapa modul disertakan, modul yang terakhir disertakan berada paling dekat dengan kelas dan dicari lebih dahulu.

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

Ringkasan Penyertaan dan Penyisipan

Perbandingan langsung:

  • include M: rantainya adalah [Class, M, ...] — metode kelas lebih diutamakan.
  • prepend M: rantainya adalah [M, Class, ...] — metode modul lebih diutamakan dan dapat memanggil super ke dalam kelas.
module M; end
class Inc; include M; end
class Pre; prepend M; end
p Inc.ancestors
p Pre.ancestors

Menyatukan Semuanya

Resolusi metode mengikuti rantai leluhur:

  • Metode kelas mengungguli modul yang disertakan.
  • Modul yang disisipkan mengungguli kelas.
  • super berjalan satu langkah ke atas dalam rantai.
module Cap
  def name; super.capitalize; end
end
class User
  prepend Cap
  def name; "ada"; end
end
puts User.new.name

Pemeriksaan Singkat

Uji pemahaman Anda tentang resolusi metode.

Rangkuman

Anda telah mempelajari resolusi metode:

  • Ruby mencari rantai leluhur dari atas ke bawah.
  • include berada di bawah kelas; prepend berada di atasnya.
  • super mencapai definisi berikutnya di atasnya dalam rantai.
  • prepend membungkus metode dengan rapi.
module Loud
  def speak; super.upcase; end
end
class Bot
  prepend Loud
  def speak; "beep"; end
end
puts Bot.new.speak

Pertanyaan yang Sering Diajukan

Apakah pelajaran “prepend dan Resolusi Method” gratis?

Ya — teks lengkap “prepend dan Resolusi Method” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Ruby Academy, upgrade ke CoddyKit PRO. Kursus Ruby Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “prepend dan Resolusi Method”?

Rantai leluhur. Kamu berlatih Ruby Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Ruby Academy?

Tidak diperlukan pengalaman sebelumnya. Ruby Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “prepend dan Resolusi Method” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Ruby Academy ini?

Ya. Setiap pelajaran Ruby Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Mendefinisikan Modul
  2. include dan extend
  3. Comparable dan Enumerable
  4. prepend dan Resolusi Method
← Kembali ke Ruby Academy