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 resultMasalah 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_threeMembuat 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.classTidak 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 allMerangkai 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 resulttake 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 resultUrutan 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_matchKapan 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 fizzMenyatukan Semuanya
Enumerator malas menunda pekerjaan:
.lazymembuat 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:
.lazymenunda 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
- Menulis each Kustom
- Menyertakan Enumerable
- Enumerator Malas
- Objek Enumerator