0Pricing
Ruby Academy · Pelajaran

Comparable dan Enumerable

Mixin standar.

Comparable dan Enumerable adalah pelajaran Ruby Academy gratis di CoddyKit. Ini adalah pelajaran 3 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.

Campuran Standar

Ruby menyediakan modul yang kuat untuk dicampurkan ke dalam kelas Anda sendiri. Dua yang paling menonjol adalah Comparable dan Enumerable. Masing-masing memberi Anda banyak metode sebagai imbalan karena hanya perlu mengimplementasikan satu metode.

puts Comparable.instance_methods.sort.inspect

Comparable Memerlukan <=>

Comparable mengharuskan Anda mendefinisikan operator pesawat ruang angkasa <=>, yang mengembalikan -1, 0, atau 1. Sebagai gantinya, Anda mendapatkan <, <=, ==, >, >=, dan between?.

class Weight
  include Comparable
  attr_reader :grams
  def initialize(g); @grams = g; end
  def <=>(other); grams <=> other.grams; end
end
puts Weight.new(50) < Weight.new(80)

Metode Perbandingan Gratis

Setelah satu operator didefinisikan, semua metode perbandingan dapat langsung digunakan.

class Weight
  include Comparable
  attr_reader :grams
  def initialize(g); @grams = g; end
  def <=>(other); grams <=> other.grams; end
end
a = Weight.new(100)
b = Weight.new(100)
puts a == b
puts Weight.new(30).between?(Weight.new(10), Weight.new(50))

clamp dari Nilai yang Dapat Dibandingkan

Comparable juga menyediakan clamp, yang menjaga nilai tetap berada dalam suatu rentang.

puts 15.clamp(0, 10)
puts (-5).clamp(0, 10)
puts 7.clamp(0, 10)

Mengurutkan Objek yang Dapat Dibandingkan

Karena <=> telah ditentukan, larik objek Anda dapat diurutkan secara otomatis.

class Weight
  include Comparable
  attr_reader :grams
  def initialize(g); @grams = g; end
  def <=>(other); grams <=> other.grams; end
  def to_s; "#{grams}g"; end
end
list = [Weight.new(30), Weight.new(10), Weight.new(20)]
puts list.sort.map(&:to_s).inspect

Modul Enumerasi Memerlukan each

Enumerable mengharuskan Anda menentukan each. Sebagai gantinya, Anda mendapatkan map, select, reduce, min, max, sort, dan puluhan lainnya.

class TodoList
  include Enumerable
  def initialize(*items); @items = items; end
  def each(&block); @items.each(&block); end
end
list = TodoList.new("buy milk", "call mom")
puts list.map(&:upcase).inspect

Agregasi Gratis

Dengan menyediakan each, metode agregasi seperti count, min, dan include? tersedia.

class Scores
  include Enumerable
  def initialize(*n); @n = n; end
  def each(&block); @n.each(&block); end
end
s = Scores.new(8, 3, 9, 4)
puts s.max
puts s.min
puts s.count

select dan reject

Metode penyaringan juga tersedia.

class Numbers
  include Enumerable
  def initialize(*n); @n = n; end
  def each(&block); @n.each(&block); end
end
nums = Numbers.new(1, 2, 3, 4, 5, 6)
p nums.select(&:even?)
p nums.reject(&:even?)

reduce untuk Total

reduce (alias inject) menggabungkan elemen, misalnya dengan menjumlahkannya.

class Basket
  include Enumerable
  def initialize(*p); @p = p; end
  def each(&block); @p.each(&block); end
end
b = Basket.new(10, 20, 30)
puts b.reduce(0) { |sum, price| sum + price }

Menggabungkan Kedua Modul Campuran

Tambahkan Comparable untuk pengurutan dan Enumerable untuk iterasi, maka kelas Anda akan terasa seperti koleksi bawaan.

class Playlist
  include Enumerable
  def initialize(*songs); @songs = songs; end
  def each(&block); @songs.each(&block); end
end
pl = Playlist.new("c", "a", "b")
puts pl.sort.inspect
puts pl.first

Menyatukan Semuanya

Modul campuran standar memberikan manfaat besar dengan kontrak kecil:

  • Comparable: tentukan <=>, lalu dapatkan semua perbandingan.
  • Enumerable: tentukan each, lalu dapatkan seluruh perangkat metode koleksi.
class Bag
  include Enumerable
  def initialize(*x); @x = x; end
  def each(&b); @x.each(&b); end
end
puts Bag.new(3, 1, 2).sort.inspect

Pemeriksaan Singkat

Uji pemahaman Anda tentang modul campuran standar.

Rangkuman

Anda telah mempelajari modul campuran standar:

  • Comparable memerlukan <=> dan menyediakan perbandingan + clamp + between?.
  • Enumerable memerlukan each dan menyediakan map/select/reduce/min/max serta banyak lainnya.
  • Bersama-sama, keduanya membuat kelas khusus terasa seperti kelas bawaan.
class Temp
  include Comparable
  attr_reader :deg
  def initialize(d); @deg = d; end
  def <=>(o); deg <=> o.deg; end
end
puts Temp.new(20) > Temp.new(15)

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Comparable dan Enumerable” gratis?

Ya — teks lengkap “Comparable dan Enumerable” 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 “Comparable dan Enumerable”?

Mixin standar. 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 3 dari 4.

Berapa lama pelajaran “Comparable dan Enumerable” 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