0Pricing
Scala for Backend Engineering & Functional Programming · Pelajaran

Membangun LazyList

Buat urutan malas.

Membangun LazyList adalah pelajaran Scala for Backend Engineering & Functional Programming 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 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.

Dasar-Dasar Konstruksi

Ada beberapa cara untuk membuat LazyList. Cara paling sederhana adalah pabrik apply, seperti saat membuat List.

Namun, kekuatan sebenarnya berasal dari konstruktor yang mempertahankan sifat malas pada bagian akhir, yang akan kita pelajari dalam pelajaran ini.

val ll = LazyList(10, 20, 30)
println(ll.head)

LazyList Kosong

LazyList.empty adalah terminator, padanan malas dari Nil. Setiap LazyList berhingga berakhir dengannya.

Anda menggunakannya sebagai kasus dasar saat menambahkan elemen di awal dengan #::.

object Demo extends App {
  val empty = LazyList.empty[Int]
  println(empty.isEmpty)
  println(empty.toList)
}

Menambahkan di Awal dengan #::

Operator #:: melakukan cons pada bagian kepala ke bagian akhir by-name. Bangun daftar dari kanan ke kiri, lalu akhiri dengan LazyList.empty.

Karena #:: menerima bagian akhirnya secara malas, tidak ada yang melewati bagian kepala yang dibuat sampai dipaksa.

object Demo extends App {
  val ll = 1 #:: 2 #:: 3 #:: LazyList.empty
  println(ll.toList)
}

Mengamati Evaluasi Malas

Letakkan efek samping di bagian akhir untuk melihat kapan efek tersebut berjalan. Hanya pemaksaan bagian akhir yang memicunya.

Jalankan ini: "building tail" hanya tercetak setelah Anda mengakses elemen kedua, bukan saat LazyList didefinisikan.

object Demo extends App {
  val ll = 1 #:: { println("building tail"); 2 #:: LazyList.empty }
  println("defined")
  println(ll.head)
  println(ll(1))
}

cons Secara Eksplisit

Di balik layar, #:: adalah LazyList.cons. Baik bagian kepala maupun bagian akhir bersifat by-name dalam cons, sehingga Anda memiliki kendali penuh atas evaluasi.

Ini berguna saat mendefinisikan generator rekursif.

val ll = LazyList.cons(1, LazyList.cons(2, LazyList.empty))
println(ll.head)

Generator Rekursif

LazyList dapat merujuk pada dirinya sendiri. Definisikan fungsi yang menghasilkan bagian kepala dan memanggil dirinya sendiri secara rekursif untuk bagian akhir.

Karena bagian akhir bersifat by-name, rekursi tidak berjalan tanpa henti; rekursi berhenti sementara sampai setiap sel diminta.

def countFrom(n: Int): LazyList[Int] =
  n #:: countFrom(n + 1)

println(countFrom(5).take(3).toList)

Menjalankan Generator

Mari jalankan generator yang merujuk pada dirinya sendiri dan ambil beberapa nilai. take membatasi jumlah sel yang dipaksa.

Tanpa take, proses ini akan berulang tanpa henti, jadi selalu batasi generator tak terbatas sebelum memaksanya.

object Demo extends App {
  def countFrom(n: Int): LazyList[Int] =
    n #:: countFrom(n + 1)
  println(countFrom(1).take(5).toList)
}

Dari Iterator

Anda dapat membungkus koleksi atau iterator yang sudah ada. LazyList.from(start) membuat hitungan tak terbatas, dan someList.to(LazyList) mengonversi data yang sudah diketahui secara eager.

Keduanya memberikan tampilan malas atas data yang sudah Anda miliki atau dapat Anda deskripsikan.

object Demo extends App {
  val ll = List(1, 2, 3).to(LazyList)
  println(ll.map(_ * 2).toList)
}

LazyList.iterate

LazyList.iterate(seed)(f) menerapkan f berulang kali untuk membuat setiap elemen berikutnya dari elemen sebelumnya.

Ini adalah cara yang rapi untuk mengekspresikan urutan yang ditentukan oleh aturan langkah, seperti pangkat dua.

object Demo extends App {
  val powers = LazyList.iterate(1)(_ * 2)
  println(powers.take(6).toList)
}

LazyList.continually

LazyList.continually(expr) mengulang ekspresi tanpa henti, dengan mengevaluasi ulang ekspresi tersebut untuk setiap elemen. Berguna untuk aliran konstan atau acak.

Gabungkan dengan take untuk mengambil bagian berhingga.

object Demo extends App {
  val zeros = LazyList.continually(0)
  println(zeros.take(4).toList)
}

Memilih Konstruktor

Gunakan apply untuk daftar kecil yang tetap, #:: atau cons untuk rekursi yang ditulis manual, iterate untuk aturan langkah, from untuk menghitung, dan continually untuk pengulangan.

Semuanya mempertahankan sifat malas pada bagian akhir, jadi pilihan Anda bergantung pada kemudahan ekspresi.

Pemeriksaan Singkat

Periksa pemahaman Anda tentang konstruksi LazyList.

Ringkasan

Anda membangun LazyLists dengan apply, empty, #::/cons, iterate, from, dan continually.

Bagian akhir by-name membuat generator yang merujuk pada dirinya sendiri dan berpotensi tak terbatas aman untuk didefinisikan. Selanjutnya, kita akan memanfaatkannya untuk membuat aliran yang benar-benar tak terbatas.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Membangun LazyList” gratis?

Ya — teks lengkap “Membangun LazyList” 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 “Membangun LazyList”?

Buat urutan malas. 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 2 dari 4.

Berapa lama pelajaran “Membangun LazyList” 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