0Pricing
Ruby Academy · Pelajaran

Enumerator Malas

Evaluasi malas.

Enumerator Malas 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.

Evaluasi Malas

Biasanya, metode Enumerable memproses seluruh koleksi sekaligus. Enumerator malas memproses elemen satu per satu, hanya saat diperlukan. Dengan demikian, Anda dapat bekerja dengan urutan yang sangat besar atau bahkan tak terbatas.

result = (1..Float::INFINITY).lazy.map { |n| n * 2 }.first(5)
p result

Masalah pada Metode Evaluasi Langsung

Memanggil map pada rentang tak terbatas tanpa lazy tidak akan pernah selesai karena metode tersebut terlebih dahulu mencoba membangun larik hasil yang lengkap.

# Eager version would hang. Lazy completes instantly:
first_three = (1..Float::INFINITY).lazy.select(&:even?).first(3)
p first_three

Membuat Enumerator Malas

Panggil .lazy pada enumerable apa pun untuk mendapatkan versi malas. Metode yang dirangkai setelahnya juga menjadi malas.

lazy = (1..10).lazy
puts lazy.class

Tidak Ada yang Berjalan sampai Dipaksa

Rangkaian malas menyusun resep, tetapi tidak menjalankannya. Metode akhir seperti first, to_a, atau force memicu pekerjaan tersebut.

chain = (1..Float::INFINITY).lazy.map { |n| n * n }
puts "Nothing computed yet"
p chain.first(4)

Memaksa Hasil

force (alias to_a) mewujudkan rangkaian malas yang dibatasi menjadi sebuah larik.

result = (1..20).lazy.select(&:odd?).first(5)
p result
all = (1..6).lazy.map { |n| n * 10 }.force
p all

Merangkai Secara Malas

Beberapa operasi malas disisipkan untuk setiap elemen, bukan dijalankan sebagai beberapa lintasan penuh yang terpisah. Setiap nilai melewati seluruh rangkaian sebelum nilai berikutnya mulai diproses.

result = (1..Float::INFINITY)
  .lazy
  .map { |n| n * n }
  .select { |n| n.even? }
  .first(4)
p result

take dan Pengambilan Selama Kondisi Terpenuhi

take dan take_while yang malas berhenti mengambil nilai setelah kondisinya terpenuhi.

result = (1..Float::INFINITY).lazy.take_while { |n| n < 6 }.to_a
p result

Urutan Tak Terbatas

Enumerator malas sangat berguna untuk pembangkit. Padukan dengan Enumerator untuk memodelkan aliran yang tidak berujung.

naturals = Enumerator.new do |y|
  n = 1
  loop { y << n; n += 1 }
end
p naturals.lazy.map { |x| x * 3 }.first(5)

Efisiensi Memori

Karena rangkaian malas tidak pernah mewujudkan seluruh koleksi perantara, rangkaian ini menghemat memori saat menyaring data besar menjadi beberapa hasil saja.

big = (1..1_000_000).lazy
first_match = big.select { |n| n % 7 == 0 && n % 11 == 0 }.first
puts first_match

Kapan Menggunakan Evaluasi Malas

Gunakan evaluasi malas ketika:

  • Sumbernya tak terbatas atau sangat besar.
  • Anda hanya memerlukan beberapa hasil.
  • Anda ingin menghindari larik perantara yang besar.

Untuk koleksi kecil, metode evaluasi langsung lebih sederhana dan cukup cepat.

fizz = (1..Float::INFINITY).lazy.select { |n| n % 3 == 0 }.first(5)
p fizz

Menyatukan Semuanya

Enumerator malas menunda pekerjaan:

  • .lazy membuat rangkaian menjadi malas.
  • Pekerjaan hanya berjalan ketika metode akhir mengambil nilai.
  • Sangat cocok untuk urutan tak terbatas atau sangat besar.
squares = (1..Float::INFINITY).lazy.map { |n| n * n }
p squares.select(&:odd?).first(4)

Pemeriksaan Singkat

Uji pemahaman Anda tentang enumerator malas.

Rangkuman

Anda telah mempelajari enumerator malas:

  • .lazy menunda komputasi.
  • Metode akhir (first, to_a, force) memicu pekerjaan.
  • Setiap nilai melewati seluruh rangkaian sesuai permintaan.
  • Ideal untuk urutan tak terbatas atau besar.
p (1..Float::INFINITY).lazy.select(&:even?).map { |n| n + 1 }.first(3)

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Enumerator Malas” gratis?

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

Evaluasi malas. 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 “Enumerator Malas” 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