0Pricing
Ruby Academy · Ders

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.inspect

Comparable, <=> 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).inspect

Numaralandı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).inspect

Toplama 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.count

select 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.first

Hepsini 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: each tanı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.inspect

Kı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ıra clamp ile between? sağlar.
  • Enumerable, each gerektirir 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

  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