Scala for Backend Engineering & Functional Programming · Pelajaran

Aliran Tak Terbatas

Modelkan data tanpa akhir dengan aman.

Pelajaran 3 dari 413 langkah

Aliran Tak Terbatas adalah pelajaran Scala for Backend Engineering & Functional Programming 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 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.

Tak Terbatas dengan Aman

LazyList dapat mendeskripsikan urutan tak terbatas karena bagian akhirnya tidak pernah dihitung sampai diminta. Anda hanya mewujudkan awalan yang dikonsumsi.

Hal ini memungkinkan Anda memodelkan bilangan asli, bilangan prima, atau pembacaan sensor tanpa menentukan batas sejak awal.

Semua Bilangan Asli

LazyList.from(1) adalah urutan tak terbatas 1, 2, 3, ... Anda dapat mengambil awalan berhingga apa pun.

Memaksa seluruh urutan tidak akan pernah selesai, jadi selalu potong dengan take atau berhenti menggunakan predikat.

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

from dengan Langkah

LazyList.from(start, step) menghitung dengan interval tertentu. Gunakan untuk bilangan genap, detak, atau barisan aritmetika apa pun.

Urutannya tak terbatas, tetapi setiap pemanggilan take hanya memaksa bagian yang Anda minta.

object Demo extends App {
  val evens = LazyList.from(0, 2)
  println(evens.take(5).toList)
}

Aliran yang Merujuk pada Diri Sendiri

Sebuah trik terkenal: definisikan LazyList berdasarkan dirinya sendiri. Urutan Fibonacci dapat ditulis dengan melakukan zip pada aliran dengan bagian akhirnya sendiri.

Ini hanya berhasil karena bagian akhir tetap belum dievaluasi sampai setiap sel diambil.

lazy val fibs: LazyList[Int] =
  0 #:: 1 #:: fibs.zip(fibs.tail).map { case (a, b) => a + b }
// fibs(0)=0, fibs(1)=1, fibs(2)=1 ...

Menjalankan Fibonacci

Mari paksa awalan dari aliran Fibonacci yang merujuk pada dirinya sendiri tersebut.

Setiap elemen baru dihitung dari elemen-elemen sebelumnya yang sudah dimemoisasi, sehingga keseluruhan proses tetap efisien saat Anda mengambil lebih banyak nilai.

object Demo extends App {
  lazy val fibs: LazyList[Int] =
    0 #:: 1 #:: fibs.zip(fibs.tail).map { case (a, b) => a + b }
  println(fibs.take(10).toList)
}

iterate untuk Urutan

LazyList.iterate menghasilkan urutan tak terbatas berdasarkan fungsi langkah. Pangkat, pertumbuhan geometris, dan mesin keadaan dapat direpresentasikan secara alami.

Di sini setiap elemen adalah tiga kali elemen sebelumnya, tanpa henti.

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

Saringan Bilangan Prima

Aliran tak terbatas sangat cocok untuk Saringan Eratosthenes. Ambil bilangan prima di bagian kepala, saring kelipatannya dari bagian yang tersisa, lalu lakukan rekursi.

filter bersifat malas, sehingga bilangan prima dihasilkan satu per satu saat Anda mengonsumsinya.

def sieve(s: LazyList[Int]): LazyList[Int] =
  s.head #:: sieve(s.tail.filter(_ % s.head != 0))

val primes = sieve(LazyList.from(2))

Menjalankan Saringan

Sekarang ambil sepuluh bilangan prima pertama dari saringan tak terbatas tersebut.

Hanya bagian yang cukup dari aliran bilangan dasar yang dipaksa untuk menghasilkan sepuluh bilangan prima, yang menunjukkan perhitungan berdasarkan permintaan.

object Demo extends App {
  def sieve(s: LazyList[Int]): LazyList[Int] =
    s.head #:: sieve(s.tail.filter(_ % s.head != 0))
  val primes = sieve(LazyList.from(2))
  println(primes.take(10).toList)
}

Jangan Pernah Memaksa Seluruh Urutan

Method yang memerlukan seluruh urutan, seperti length, toList pada aliran tanpa batas, atau foreach tanpa penghentian, akan macet pada LazyList tak terbatas.

Selalu batasi terlebih dahulu dengan take, takeWhile, atau find.

// DON'T: LazyList.from(1).toList    // hangs forever
val ok = LazyList.from(1).take(3).toList

Jebakan Menyimpan Bagian Kepala

Jika sebuah val menyimpan bagian kepala LazyList tak terbatas yang menggunakan memo dan Anda mengonsumsinya jauh ke dalam, setiap sel yang dipaksa akan tetap hidup sehingga terjadi kebocoran memori.

Untuk penelusuran panjang, lakukan konsumsi melalui method tanpa mengikat bagian kepala, atau gunakan Iterator.

Mengapa Aliran Tak Terbatas Penting

Aliran tak terbatas memungkinkan Anda memisahkan pembuatan dari konsumsi. Produsen mendeskripsikan aturan tanpa akhir; konsumen menentukan seberapa banyak yang diwujudkan.

Ini adalah pola fungsional yang kuat untuk pipeline, simulasi, dan sumber data malas.

Pemeriksaan Singkat

Uji pemahaman Anda tentang LazyLists tak terbatas.

Ringkasan

LazyList tak hingga bekerja karena ekornya digerakkan sesuai permintaan: from, iterate, fibs yang merujuk pada dirinya sendiri, dan penyaring bilangan prima semuanya menghasilkan elemen tanpa henti, tetapi hanya merealisasikan elemen yang Anda konsumsi.

Hindari operasi pada seluruh urutan dan menahan elemen pertama. Berikutnya, kita akan menguasai pengambilan dan penyaringan secara malas.

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 “Aliran Tak Terbatas” gratis?

Ya — teks lengkap “Aliran Tak Terbatas” 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 “Aliran Tak Terbatas”?

Modelkan data tanpa akhir dengan aman. 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 3 dari 4.

Berapa lama pelajaran “Aliran Tak Terbatas” 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