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.inspectComparable 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).inspectModul 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).inspectAgregasi 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.countselect 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.firstMenyatukan Semuanya
Modul campuran standar memberikan manfaat besar dengan kontrak kecil:
Comparable: tentukan<=>, lalu dapatkan semua perbandingan.Enumerable: tentukaneach, 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.inspectPemeriksaan Singkat
Uji pemahaman Anda tentang modul campuran standar.
Rangkuman
Anda telah mempelajari modul campuran standar:
Comparablememerlukan<=>dan menyediakan perbandingan +clamp+between?.Enumerablememerlukaneachdan 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
- Mendefinisikan Modul
- include dan extend
- Comparable dan Enumerable
- prepend dan Resolusi Method