0Pricing
Ruby Academy · Pelajaran

Menyertakan Enumerable

Dapatkan map/select secara otomatis.

Menyertakan Enumerable adalah pelajaran Ruby Academy gratis di CoddyKit. Ini adalah pelajaran 2 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.

Dapatkan map/select Secara Gratis

Setelah kelas Anda memiliki each, menyertakan Enumerable langsung memberi Anda map, select, reduce, sort, min, max, dan banyak lagi, yang semuanya dibangun di atas each Anda.

class Bag
  include Enumerable
  def initialize(*x); @x = x; end
  def each; @x.each { |i| yield i }; end
end
p Bag.new(1, 2, 3).map { |n| n * 10 }

Kontraknya

Kesepakatannya sederhana: sertakan Enumerable dan tentukan each. Enumerable memanggil each Anda secara internal untuk menjalankan semua hal lainnya.

class Squares
  include Enumerable
  def initialize(n); @n = n; end
  def each
    (1..@n).each { |i| yield i * i }
  end
end
p Squares.new(5).to_a

Penyaringan dengan select

select mempertahankan elemen ketika blok menghasilkan nilai benar. reject melakukan kebalikannya.

class Nums
  include Enumerable
  def initialize(*x); @x = x; end
  def each; @x.each { |i| yield i }; end
end
n = Nums.new(1, 2, 3, 4, 5, 6)
p n.select(&:even?)
p n.reject(&:even?)

Agregasi dengan reduce

reduce melipat koleksi menjadi satu nilai.

class Cart
  include Enumerable
  def initialize(*p); @p = p; end
  def each; @p.each { |i| yield i }; end
end
puts Cart.new(5, 10, 15).reduce(:+)

Minimum, maksimum, pengurutan

Metode berbasis perbandingan dapat digunakan selama elemen Anda dapat dibandingkan.

class Scores
  include Enumerable
  def initialize(*n); @n = n; end
  def each; @n.each { |i| yield i }; end
end
s = Scores.new(7, 2, 9, 4)
puts s.min
puts s.max
p s.sort

Pencarian dan Keanggotaan

find mengembalikan elemen pertama yang cocok; include? memeriksa keanggotaan.

class Words
  include Enumerable
  def initialize(*w); @w = w; end
  def each; @w.each { |x| yield x }; end
end
w = Words.new("cat", "dog", "bird")
puts w.find { |x| x.length == 4 }
puts w.include?("dog")

group_by dan partition

Enumerable menyediakan pembantu pengelompokan yang andal.

class Nums
  include Enumerable
  def initialize(*x); @x = x; end
  def each; @x.each { |i| yield i }; end
end
n = Nums.new(1, 2, 3, 4, 5)
p n.group_by(&:even?)
p n.partition(&:odd?)

Pengurutan Memerlukan Elemen yang Dapat Dibandingkan

Jika elemen Anda berupa objek khusus, berikan <=> kepada objek tersebut melalui modul yang dapat dibandingkan agar sort, min, dan max mengetahui cara mengurutkannya.

Item = Struct.new(:price) do
  include Comparable
  def <=>(o); price <=> o.price; end
end
class Shelf
  include Enumerable
  def initialize(*i); @i = i; end
  def each; @i.each { |x| yield x }; end
end
shelf = Shelf.new(Item.new(30), Item.new(10), Item.new(20))
p shelf.min.price

each dengan Indeks

Enumerable juga menyediakan each_with_index dan each_with_object untuk iterasi yang lebih kaya.

class Letters
  include Enumerable
  def initialize(*l); @l = l; end
  def each; @l.each { |x| yield x }; end
end
Letters.new("a", "b", "c").each_with_index do |letter, i|
  puts "#{i}: #{letter}"
end

Merangkai Metode

Karena metode-metode ini mengembalikan larik atau enumerator, Anda dapat merangkainya menjadi alur pemrosesan yang ekspresif.

class Nums
  include Enumerable
  def initialize(*x); @x = x; end
  def each; @x.each { |i| yield i }; end
end
result = Nums.new(1, 2, 3, 4, 5, 6).select(&:even?).map { |n| n * n }
p result

Menyatukan Semuanya

Menyertakan Enumerable memberikan manfaat besar:

  • Tentukan each sekali.
  • Dapatkan map, select, reduce, pengurutan, pencarian, group_by, dan puluhan lainnya.
  • Tambahkan kemampuan membandingkan pada elemen untuk metode pengurutan.
class Range5
  include Enumerable
  def each; (1..5).each { |n| yield n }; end
end
puts Range5.new.sum

Pemeriksaan Singkat

Uji pemahaman Anda tentang penyertaan Enumerable.

Rangkuman

Anda telah mempelajari cara menyertakan Enumerable:

  • Tentukan each, sertakan modulnya, lalu dapatkan seluruh perangkat metode.
  • map/select/reduce/find/group_by semuanya berjalan menggunakan each Anda.
  • Pengurutan elemen memerlukan <=>.
  • Metode dapat dirangkai menjadi alur pemrosesan.
class Tens
  include Enumerable
  def each; [10, 20, 30].each { |n| yield n }; end
end
p Tens.new.map { |n| n + 1 }

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Menyertakan Enumerable” gratis?

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

Dapatkan map/select secara otomatis. 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 2 dari 4.

Berapa lama pelajaran “Menyertakan 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. Menulis each Kustom
  2. Menyertakan Enumerable
  3. Enumerator Malas
  4. Objek Enumerator
← Kembali ke Ruby Academy