0Pricing
Kotlin Academy · Pelajaran

Merangkai Pipeline dan Menghindari List Perantara dengan Sequence

Bangun pipeline bertahap dan gunakan Sequence untuk evaluasi malas.

Merangkai Pipeline dan Menghindari List Perantara dengan Sequence adalah pelajaran Kotlin Academy 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 Kotlin Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Kotlin Academy mencakup 4 pelajaran total.

Masalah: Daftar Perantara

Setiap operasi koleksi (penyaringan, pemetaan, dan sebagainya) membuat daftar baru. Untuk koleksi besar atau rangkaian panjang, hal ini memboroskan memori dan waktu.

Evaluasi Langsung vs Malas

Operasi koleksi bersifat langsung: setiap langkah memproses seluruh daftar sebelum langkah berikutnya. Operasi urutan bersifat malas: satu elemen diproses melalui semua langkah sebelum beralih ke elemen berikutnya.

Mengonversi ke Urutan

Panggil asSequence() untuk beralih dari pemrosesan langsung (daftar) ke pemrosesan malas (urutan).
val result = (1..1_000_000)
    .asSequence()
    .filter { it % 2 == 0 }
    .map { it * it }
    .take(5)
    .toList()
println(result)  // [4, 16, 36, 64, 100]

Urutan Bersifat Malas: Tidak Ada Pekerjaan hingga Operasi Terminal

Tidak ada komputasi yang berlangsung sampai Anda memanggil operator terminal (toList, first, sum, dan sebagainya).
val seq = generateSequence(1) { it + 1 }  // infinite!
    .filter { it % 3 == 0 }
    .map { it * it }
val first5 = seq.take(5).toList()
println(first5)  // [9, 36, 81, 144, 225]

generateSequence: Urutan Tak Terbatas

generateSequence membuat urutan malas yang tidak terbatas.
val fibonacci = generateSequence(Pair(0, 1)) { (a, b) -> Pair(b, a + b) }
    .map { it.first }
val first10 = fibonacci.take(10).toList()
println(first10)  // [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

Pembuat Urutan

Pembuat urutan { } dengan menghasilkan membuat urutan malas khusus.
val evens = sequence {
    var n = 0
    while (true) {
        yield(n)
        n += 2
    }
}
println(evens.take(5).toList())  // [0, 2, 4, 6, 8]

Kapan Menggunakan Urutan

Gunakan urutan ketika: koleksinya besar (>1000 elemen), Anda menggunakan beberapa operasi yang dirangkai, dan/atau Anda hanya memerlukan sebagian kecil hasil.

Kapan NOT Menggunakan Urutan

Untuk koleksi kecil (<100 elemen), urutan menambah beban tambahan. Mekanisme berbasis iterator lebih lambat untuk rangkaian pendek.
// Overkill for small list:
listOf(1, 2, 3).asSequence().map { it * 2 }.toList()
// Just use:
listOf(1, 2, 3).map { it * 2 }

Operasi Terminal Urutan

Operasi terminal memicu pemrosesan. Beberapa yang umum: toList(), first(), last(), jumlah(), apa pun(), all(), tidak satu pun().
val s = (1..100).asSequence().filter { it % 7 == 0 }
println(s.first())          // 7
println(s.count())          // 14
println(s.sum())            // 728

Operasi Berstatus vs Tanpa Status

Beberapa operasi urutan bersifat berstatus (pengurutan, penghilangan duplikat)—operasi tersebut harus melihat semua elemen sebelum menghasilkan keluaran. Operasi ini memutus evaluasi malas.
val s = (1..10).asSequence()
    .filter { it > 3 }   // stateless: lazy
    .sorted()            // stateful: must see all elements
    .take(3).toList()
println(s)  // [4, 5, 6]

constrainOnce: Keamanan Iterasi Tunggal

Gunakan constrainOnce() agar urutan menimbulkan galat jika diiterasi beberapa kali—berguna untuk aliran data.
val seq = generateSequence(1) { if (it < 5) it + 1 else null }
    .constrainOnce()
val first = seq.toList()   // OK
// val second = seq.toList()  // IllegalStateException!

Pemeriksaan Cepat

Kapan urutan mulai memproses elemen?

Ringkasan

Urutan bersifat malas—tidak ada pekerjaan hingga operasi terminal. Gunakan asSequence() untuk koleksi besar dengan beberapa operasi yang dirangkai. generateSequence dan pembuat urutan { } membuat aliran malas yang tidak terbatas. Operasi terminal memicu pemrosesan.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Merangkai Pipeline dan Menghindari List Perantara dengan Sequence” gratis?

Ya — teks lengkap “Merangkai Pipeline dan Menghindari List Perantara dengan Sequence” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Kotlin Academy, upgrade ke CoddyKit PRO. Kursus Kotlin Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Merangkai Pipeline dan Menghindari List Perantara dengan Sequence”?

Bangun pipeline bertahap dan gunakan Sequence untuk evaluasi malas. Kamu berlatih Kotlin 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 Kotlin Academy?

Tidak diperlukan pengalaman sebelumnya. Kotlin 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 4 dari 4.

Berapa lama pelajaran “Merangkai Pipeline dan Menghindari List Perantara dengan Sequence” 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 Kotlin Academy ini?

Ya. Setiap pelajaran Kotlin 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. map dan flatMap: Mengubah Setiap Elemen
  2. filter, filterNot, dan partition
  3. fold, reduce, dan runningFold
  4. Merangkai Pipeline dan Menghindari List Perantara dengan Sequence
← Kembali ke Kotlin Academy