Comparable ve Enumerable
Standart mixin'ler
Comparable ve Enumerable, CoddyKit'te ücretsiz bir Ruby Academy dersidir. Bu, 4 dersinin 3. 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.
Standart Karışımlar
Ruby, kendi sınıflarınıza dâhil edebileceğiniz güçlü modüller sunar. Öne çıkan iki tanesi Karşılaştırılabilir ve Numaralanabilir modülleridir. Her biri, yalnızca bir metodu uygulamanız karşılığında size birçok metot sağlar.
puts Comparable.instance_methods.sort.inspectComparable, <=> Gerektirir
Comparable, -1, 0 veya 1 döndüren uzay gemisi işleci <=>'ni tanımlamanızı gerektirir. Bunun karşılığında <, <=, ==, >, >= ve between? metotlarını elde edersiniz.
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)Karşılaştırma Metotları Hazır Gelir
Tek bir işleç tanımlandığında tüm karşılaştırma metotları kendiliğinden çalışır.
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))Comparable'dan clamp
Comparable ayrıca bir değeri bir aralık içinde tutan clamp yöntemini de sağlar.
puts 15.clamp(0, 10)
puts (-5).clamp(0, 10)
puts 7.clamp(0, 10)Comparable Nesnelerini Sıralama
<=> tanımlandığı için nesnelerinizden oluşan bir dizi otomatik olarak sıralanabilir.
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).inspectNumaralandırma Modülü için each Gerekir
Enumerable modülü each tanımlamanızı gerektirir. Karşılığında map, select, reduce, min, max, sort ve onlarca yönteme daha sahip olursunuz.
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).inspectToplama Yöntemleri Hazır
each hazır olduğunda count, min ve include? gibi toplama yöntemleri kullanılabilir.
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 ve reject
Filtreleme yöntemleri de gelir.
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?)Toplamlar için reduce
reduce (inject diğer adıyla) öğeleri birleştirir; örneğin toplamlarını hesaplar.
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 }Her İki Karışımı Birleştirme
Sıralama için Comparable ile yineleme için Enumerable eklediğinizde sınıfınız yerleşik bir koleksiyon gibi davranır.
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.firstHepsini Birleştirme
Standart karışımlar küçük bir sözleşmeyi yerine getirmenizi ödüllendirir:
Comparable:<=>tanımlayın, tüm karşılaştırmaları elde edin.Enumerable:eachtanımlayın, koleksiyon araçlarının tamamını elde edin.
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.inspectKısa Kontrol
Standart karışımlarla ilgili anlayışınızı test edin.
Özet
Standart karışımları öğrendiniz:
Comparable,<=>gerektirir ve karşılaştırmaların yanı sıraclampilebetween?sağlar.Enumerable,eachgerektirir ve map/select/reduce/min/max ile daha fazlasını sağlar.- Birlikte, özel sınıflarınızın yerleşik sınıflar gibi davranmasını sağlarlar.
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)Sıkça Sorulan Sorular
“Comparable ve Enumerable” dersi ücretsiz mi?
Evet — “Comparable ve Enumerable” 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.
“Comparable ve Enumerable” dersinde ne öğreneceğim?
Standart mixin'ler 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 3. dersidir.
“Comparable ve Enumerable” 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
- Modüller Tanımlama
- include ve extend
- Comparable ve Enumerable
- prepend ve Yöntem Çözümleme