Scala for Backend Engineering & Functional Programming · Pelajaran

Mengambil dan Menyaring Secara Malas

Ambil sebagian dari aliran tak terbatas.

Pelajaran 4 dari 413 langkah

Mengambil dan Menyaring Secara Malas adalah pelajaran Scala for Backend Engineering & Functional Programming 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 Scala for Backend Engineering & Functional Programming, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Scala for Backend Engineering & Functional Programming mencakup 4 pelajaran total.

Mengonsumsi Secara Malas

Nilai sebenarnya dari LazyList terlihat saat Anda mengonsumsinya. Operasi seperti take, filter, dan map tetap bersifat malas, dengan menghitung hanya sel yang pada akhirnya Anda paksa.

Pelajaran ini membahas transformator utama dan cara menghentikan evaluasi malas pada saat yang tepat.

take(n)

take(n) mengembalikan LazyList yang berisi paling banyak n elemen pertama dan tetap bersifat malas. Tidak ada yang dihitung sampai Anda memaksa hasilnya.

Ini adalah cara yang aman untuk membatasi aliran tak hingga.

object Demo extends App {
  val first5 = LazyList.from(1).take(5)
  println(first5.toList)
}

takeWhile

takeWhile(p) menghasilkan elemen selama predikat terpenuhi, lalu berhenti pada kegagalan pertama.

Pada aliran tak hingga, ini merupakan kondisi penghentian yang rapi dan tidak mengharuskan Anda mengetahui jumlah elemennya.

object Demo extends App {
  val small = LazyList.from(1).takeWhile(_ < 6)
  println(small.toList)
}

drop dan dropWhile

drop(n) melewati n elemen pertama; dropWhile(p) melewati elemen selama predikat terpenuhi. Keduanya mengembalikan sisa yang tetap bersifat malas.

Gunakan keduanya untuk mencari posisi dalam aliran sebelum mengambil sebagian elemennya.

object Demo extends App {
  val rest = LazyList.from(1).drop(3).take(3)
  println(rest.toList)
}

Penyaringan Malas

filter pada LazyList bersifat malas: elemen hanya diuji saat konsumen di bagian hilir memintanya.

Jika digabungkan dengan take, Anda memproses tepat sebanyak elemen sumber yang diperlukan untuk memenuhi permintaan, tidak lebih.

object Demo extends App {
  val evens = LazyList.from(1).filter(_ % 2 == 0)
  println(evens.take(4).toList)
}

Melihat Permintaan

Tambahkan pencetakan di dalam predikat untuk melihat betapa sedikit elemen yang diuji. Penyaringan hanya berjalan sampai take terpenuhi.

Jalankan ini: jumlah baris "check" menunjukkan evaluasi yang digerakkan oleh permintaan, bukan evaluasi seluruh aliran.

object Demo extends App {
  val r = LazyList.from(1).filter { n =>
    println("check " + n); n % 3 == 0
  }
  println(r.take(2).toList)
}

Merangkai map dan filter

Anda dapat merangkai transformator; seluruh alur tetap bersifat malas dan digabungkan per elemen. Setiap elemen sumber mengalir melalui map lalu filter hanya saat diminta.

Tidak ada koleksi lengkap sementara yang dibuat.

object Demo extends App {
  val r = LazyList.from(1).map(_ * _).filter(_ > 10).take(3)
  println(r.toList)
}

find: Berhenti Lebih Awal

find(p) mengembalikan elemen pertama yang cocok sebagai Option, dan hanya memaksa evaluasi sampai elemen tersebut. Ini sangat cocok untuk mencari dalam aliran tak hingga.

Setelah kecocokan ditemukan, evaluasi langsung berhenti.

object Demo extends App {
  val firstBig = LazyList.from(1).find(_ * _ > 50)
  println(firstBig)
}

headOption dan exists

headOption memeriksa elemen pertama dengan aman; exists(p) memaksa evaluasi hanya sampai kecocokan ditemukan, atau selamanya jika tidak ada. Gunakan exists pada aliran tak hingga hanya jika kecocokan dijamin ada.

Keduanya berhenti sedini mungkin.

object Demo extends App {
  val has = LazyList.from(1).exists(_ == 7)
  println(has)
}

Memaksa Hasil

Transformator malas mendeskripsikan pekerjaan; operasi terminal memaksanya untuk dijalankan. toList, foreach, sum, dan foldLeft mengonsumsi aliran yang telah dibatasi dan menghasilkan nilai konkret.

Selalu batasi aliran tak hingga sebelum menggunakan operasi terminal yang membutuhkan seluruh aliran.

object Demo extends App {
  val total = LazyList.from(1).take(100).sum
  println(total)
}

Jebakan Saat Menyaring

filter yang tidak menemukan kecocokan mengubah take yang telah dibatasi menjadi pencarian tak hingga. LazyList.from(1).filter(_ < 0).take(1) akan berjalan selamanya.

Pastikan predikat dapat terpenuhi, atau pasangkan penyaringan dengan takeWhile untuk menjamin penghentian.

Pemeriksaan Singkat

Periksa pemahaman Anda tentang konsumsi malas.

Ringkasan

take, takeWhile, drop, filter, dan map tetap bersifat malas dan digabungkan per elemen; find, exists, dan headOption berhenti lebih awal; operasi terminal seperti toList dan sum memaksa hasil.

Waspadai penyaring yang tidak mungkin terpenuhi pada aliran tak hingga. Kini Anda dapat membuat dan mengonsumsi urutan malas dengan percaya diri.

Gratis untuk memulai

Belajar Scala dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
39
Pelajaran
143

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Mengambil dan Menyaring Secara Malas” gratis?

Ya — teks lengkap “Mengambil dan Menyaring Secara Malas” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Scala for Backend Engineering & Functional Programming, upgrade ke CoddyKit PRO. Kursus Scala for Backend Engineering & Functional Programming mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Mengambil dan Menyaring Secara Malas”?

Ambil sebagian dari aliran tak terbatas. Kamu berlatih Scala for Backend Engineering & Functional Programming 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 Scala for Backend Engineering & Functional Programming?

Tidak diperlukan pengalaman sebelumnya. Scala for Backend Engineering & Functional Programming 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 “Mengambil dan Menyaring Secara 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 Scala for Backend Engineering & Functional Programming ini?

Ya. Setiap pelajaran Scala for Backend Engineering & Functional Programming 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. Penjelasan Kemalasan
  2. Membangun LazyList
  3. Aliran Tak Terbatas
  4. Mengambil dan Menyaring Secara Malas
← Kembali ke Scala for Backend Engineering & Functional Programming