0Pricing
Ruby Academy · Pelajaran

Objek Enumerator

Iterasi eksternal.

Objek Enumerator adalah pelajaran Ruby Academy gratis di CoddyKit. Ini adalah pelajaran 4 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.

Iterasi Eksternal

Enumerator adalah objek yang merepresentasikan sebuah iterasi. Objek ini mendukung iterasi eksternal: Anda mengambil nilai satu per satu dengan next, alih-alih memberikan blok kepada each.

enum = [10, 20, 30].each
puts enum.next
puts enum.next

Mendapatkan Enumerator

Panggil metode iterasi seperti each tanpa blok, lalu Anda menerima Enumerator alih-alih langsung menjalankan iterasi.

enum = [1, 2, 3].each
puts enum.class

Mengambil Elemen Berikutnya

next mengembalikan elemen berikutnya setiap kali Anda memanggilnya. Enumerator mengingat posisinya.

letters = ["a", "b", "c"].each
puts letters.next
puts letters.next
puts letters.next

StopIteration di Akhir

Ketika semua nilai habis, next memunculkan StopIteration. Anda dapat menanganinya agar iterasi berhenti dengan baik.

enum = [1, 2].each
begin
  loop { puts enum.next }
rescue StopIteration
  puts "done"
end

Melihat dan Mengulang dari Awal

peek melihat nilai berikutnya tanpa memajukan posisi; rewind mengatur ulang posisi ke awal.

enum = [5, 6, 7].each
puts enum.peek
puts enum.next
enum.rewind
puts enum.next

Membuat Enumerator Khusus

Buat enumerator Anda sendiri dengan Enumerator.new. Blok tersebut menerima penghasil nilai y; dorong nilai dengan y << atau y.yield.

evens = Enumerator.new do |y|
  n = 0
  loop do
    y << n
    n += 2
  end
end
puts evens.next
puts evens.next
puts evens.next

Enumerator Tak Terbatas

Karena berbasis pengambilan, Enumerator khusus dapat berjalan tanpa batas. Anda hanya mengambil sebanyak yang diperlukan.

counter = Enumerator.new do |y|
  i = 1
  loop { y << i; i += 1 }
end
p counter.first(5)

Enumerator Mendukung Enumerasi

Enumerator menyertakan Enumerable, sehingga semua metode umum (map, select, take) juga berfungsi, sehingga iterasi internal dan eksternal dapat digunakan bersama.

fib = Enumerator.new do |y|
  a, b = 0, 1
  loop do
    y << a
    a, b = b, a + b
  end
end
p fib.take(8)

with_index

with_index menambahkan indeks ke Enumerator apa pun, dan secara opsional dapat dimulai dari angka khusus.

["x", "y", "z"].each.with_index(1) do |item, i|
  puts "#{i}: #{item}"
end

Mengembalikan Enumerator dari each

Dalam kelas Anda sendiri, kembalikan to_enum(:each) (atau enum_for) ketika tidak ada blok yang diberikan, sehingga pemanggil dapat melakukan iterasi secara eksternal.

class Trio
  def each
    return to_enum(:each) unless block_given?
    yield 1; yield 2; yield 3
  end
end
e = Trio.new.each
puts e.next
puts e.next

Menggabungkan Semuanya

Enumerator memberi Anda kendali yang terperinci:

  • Ambil nilai dengan next, intip nilai berikutnya, atau mulai ulang.
  • Buat enumerator khusus dengan Enumerator.new dan penghasil nilai.
  • Enumerator tersebut bersifat enumerable, sehingga map/select/take dapat digunakan.
odds = Enumerator.new do |y|
  n = 1
  loop { y << n; n += 2 }
end
p odds.first(4)

Pemeriksaan Singkat

Uji pemahaman Anda tentang objek Enumerator.

Ringkasan

Anda telah mempelajari objek Enumerator:

  • Iterasi eksternal melalui next, peek, dan rewind.
  • StopIteration menandakan akhir iterasi.
  • Buat enumerator khusus dengan Enumerator.new { |y| ... }.
  • Enumerator tersebut bersifat enumerable dan dapat berjalan tanpa batas.
nums = Enumerator.new { |y| 1.upto(3) { |n| y << n } }
puts nums.next
puts nums.next

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Objek Enumerator” gratis?

Ya — teks lengkap “Objek Enumerator” 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 “Objek Enumerator”?

Iterasi eksternal. 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 4 dari 4.

Berapa lama pelajaran “Objek Enumerator” 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