Penyaringan dengan if
Guard dalam comprehension.
Penyaringan dengan if 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.
Penjaga dalam For-komprehensi
Di dalam for-komprehensi, Anda dapat menambahkan kondisi if yang disebut penjaga. Kondisi ini hanya mempertahankan elemen yang memenuhi syarat, seperti filter.
object Main {
def main(args: Array[String]): Unit = {
val evens = for (x <- 1 to 10 if x % 2 == 0) yield x
println(evens)
}
}Penjaga Diubah Menjadi withFilter
Penjaga if cond ditulis ulang menjadi pemanggilan withFilter (varian malas dari filter).
for (x <- xs if p(x)) yield x- menjadi
xs.withFilter(p).map(x => x)
object Main {
def main(args: Array[String]): Unit = {
val sugar = for (x <- List(1, 2, 3, 4) if x > 2) yield x
val desugared = List(1, 2, 3, 4).withFilter(_ > 2).map(x => x)
println(sugar == desugared)
}
}Mengapa withFilter, Bukan filter
withFilter bersifat malas: metode ini tidak membuat koleksi perantara. Kondisi hanya diterapkan ketika map atau flatMap berikutnya dijalankan, sehingga menghemat memori dan pekerjaan.
object Main {
def main(args: Array[String]): Unit = {
val nums = List(1, 2, 3, 4, 5, 6)
val result = for (n <- nums if n % 3 == 0) yield n * 100
println(result)
}
}Beberapa Penjaga
Anda dapat merangkai beberapa penjaga. Penjaga-penjaga tersebut digabungkan seperti AND logis: sebuah elemen harus memenuhi semua kondisi agar tetap dipertahankan.
object Main {
def main(args: Array[String]): Unit = {
val result = for {
x <- 1 to 20
if x % 2 == 0
if x % 3 == 0
} yield x
println(result)
}
}Penjaga dengan Beberapa Generator
Penjaga dapat muncul setelah generator mana pun dan menyaring tingkat iterasi tersebut. Letakkan penjaga tepat setelah generator yang nilainya diperiksa.
object Main {
def main(args: Array[String]): Unit = {
val coprimeSums = for {
x <- 1 to 3
y <- 1 to 3
if x != y
} yield (x, y)
println(coprimeSums)
}
}Menggabungkan Penjaga dan Pengikatan Nilai
Anda dapat mencampur penjaga (if) dengan pengikatan nilai (=) secara bebas. Urutannya penting: pengikatan yang didefinisikan sebelum penjaga dapat digunakan di dalam penjaga tersebut.
object Main {
def main(args: Array[String]): Unit = {
val result = for {
x <- 1 to 6
square = x * x
if square > 10
} yield square
println(result)
}
}Penjaga pada Koleksi String
Penjaga dapat digunakan dengan predikat apa pun, bukan hanya predikat numerik. Di sini kita menyaring kata berdasarkan panjangnya.
object Main {
def main(args: Array[String]): Unit = {
val words = List("scala", "go", "java", "rust", "c")
val longWords = for (w <- words if w.length >= 4) yield w.toUpperCase
println(longWords)
}
}Menyaring Option
Untuk sebuah Option, penjaga yang gagal mengubah hasil menjadi None. Hal ini menjadikan for-komprehensi cara yang rapi untuk memvalidasi nilai opsional.
object Main {
def main(args: Array[String]): Unit = {
val ok = for (x <- Some(8) if x > 5) yield x
val bad = for (x <- Some(3) if x > 5) yield x
println(ok)
println(bad)
}
}Posisi Penjaga Mengubah Makna
Penjaga hanya melihat nilai yang diikat di atasnya. Menempatkannya sebelum pembangkit yang dibutuhkannya akan menyebabkan kompilasi gagal. Selalu tempatkan penjaga setelah pembangkit yang relevan.
object Main {
def main(args: Array[String]): Unit = {
val result = for {
x <- 1 to 3
y <- 1 to 3
if x + y == 4
} yield s"$x + $y = ${x + y}"
result.foreach(println)
}
}Penjaga versus filter akhir
Anda dapat memfilter hasil setelah ekspresi for, tetapi penjaga melakukan pemfilteran saat iterasi berlangsung. Dengan beberapa pembangkit, penjaga dapat memangkas cabang lebih awal sehingga total pekerjaan lebih sedikit.
object Main {
def main(args: Array[String]): Unit = {
val withGuard = for {
x <- 1 to 100
if x % 25 == 0
} yield x
println(withGuard)
}
}Alur validasi yang mudah dibaca
Menyusun beberapa penjaga akan terlihat seperti daftar periksa kondisi. Ini adalah salah satu penggunaan ekspresi for yang paling idiomatis dalam kode Scala nyata.
object Main {
def main(args: Array[String]): Unit = {
val valid = for {
n <- List(4, 7, 12, 15, 20)
if n > 5
if n < 18
if n % 2 == 0
} yield n
println(valid)
}
}Pemeriksaan Cepat
Menjadi pemanggilan metode apa sajakah penjaga (if) dalam ekspresi for setelah penyederhanaan sintaks?
Ringkasan
Anda telah mempelajari penjaga dalam ekspresi for:
if condmemfilter elemen selama iterasi- Penjaga disederhanakan menjadi
withFilter(pemfilteran malas) - Beberapa penjaga digabungkan seperti AND logis
- Penjaga hanya melihat nilai yang diikat di atasnya
- Penjaga dapat dipadukan secara bebas dengan pembangkit dan pengikatan
=
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Penyaringan dengan if” gratis?
Ya — teks lengkap “Penyaringan dengan if” 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 “Penyaringan dengan if”?
Guard dalam comprehension. 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 “Penyaringan dengan if” 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
- Desugaring for
- Penyaringan dengan if
- Beberapa Generator
- Menggunakan Option dan Future