getOrElse dan fold
Ekstrak nilai.
getOrElse dan fold 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.
Mengambil Nilai
Pada akhirnya, Anda perlu mengambil nilai biasa dari sebuah Option, sambil menyediakan sesuatu yang masuk akal ketika nilainya None.
Scala menyediakan pengambil yang aman seperti getOrElse dan fold untuk keperluan ini.
Menggunakan getOrElse
getOrElse mengembalikan nilai di dalam Some, atau nilai bawaan yang Anda berikan ketika nilainya None.
Hasilnya selalu berupa nilai biasa, bukan Option.
object Main {
def main(args: Array[String]): Unit = {
val a: Option[Int] = Some(5)
val b: Option[Int] = None
println(a.getOrElse(0))
println(b.getOrElse(0))
}
}Nilai Bawaan Bersifat Malas
Nilai bawaan dalam getOrElse hanya dievaluasi ketika Option bernilai None. Jadi, nilai bawaan yang mahal tidak menimbulkan biaya apa pun ketika sebuah nilai tersedia.
object Main {
def expensiveDefault(): Int = { println("computing default"); 99 }
def main(args: Array[String]): Unit = {
val present: Option[Int] = Some(7)
println(present.getOrElse(expensiveDefault()))
}
}Hindari get
Option memiliki metode get, tetapi metode ini melempar pengecualian pada None. Hal ini bertentangan dengan tujuan penggunaan Option.
Sebaiknya gunakan getOrElse, fold, atau pencocokan pola.
orElse untuk Option Cadangan
orElse berbeda: metode ini mengembalikan Option pertama jika nilainya Some; jika tidak, metode ini mengembalikan Option cadangan.
Gunakan metode ini untuk mencoba alternatif yang juga mungkin kosong.
object Main {
def main(args: Array[String]): Unit = {
val primary: Option[Int] = None
val backup: Option[Int] = Some(42)
println(primary.orElse(backup))
}
}Memperkenalkan fold
fold menangani kedua kemungkinan dalam satu pemanggilan. Anda memberikan nilai bawaan untuk None terlebih dahulu, lalu fungsi untuk nilai Some.
Metode ini mengembalikan satu hasil dengan mentransformasi nilai jika tersedia.
object Main {
def main(args: Array[String]): Unit = {
val n: Option[Int] = Some(10)
val result = n.fold(0)(x => x * 2)
println(result)
}
}fold pada None
Ketika Option bernilai None, fold mengembalikan nilai bawaan yang Anda berikan terlebih dahulu dan mengabaikan fungsi transformasi.
object Main {
def main(args: Array[String]): Unit = {
val empty: Option[Int] = None
val result = empty.fold(-1)(x => x * 2)
println(result)
}
}fold ke Tipe yang Berbeda
Kedua cabang fold harus mengembalikan tipe yang sama, tetapi tipe tersebut boleh berbeda dari tipe nilai Option.
Di sini kita mengubah Option[Int] menjadi String.
object Main {
def describe(o: Option[Int]): String =
o.fold("missing")(x => s"value $x")
def main(args: Array[String]): Unit = {
println(describe(Some(8)))
println(describe(None))
}
}Memilih di Antara Keduanya
Panduan singkat:
getOrElse: menyediakan nilai bawaan dengan tipe yang samaorElse: menyediakan Option cadanganfold: mentransformasi nilai dan menyediakan nilai bawaan dalam satu langkah- pencocokan pola: ketika setiap kasus memerlukan logika yang lebih kompleks
Menggabungkan dengan map
Idiom yang umum adalah menggunakan map terlebih dahulu untuk melakukan transformasi, lalu getOrElse untuk mendapatkan nilai biasa.
object Main {
def main(args: Array[String]): Unit = {
val name: Option[String] = Some("ada")
val display = name.map(_.toUpperCase).getOrElse("ANON")
println(display)
}
}Menyatukan Semuanya
Cari nilai konfigurasi, sediakan Option cadangan, lalu dapatkan nilai bawaan dengan getOrElse.
object Main {
val env = Map("timeout" -> "30")
def main(args: Array[String]): Unit = {
val timeout = env.get("timeout")
.flatMap(_.toIntOption)
.getOrElse(60)
println(timeout)
val retries = env.get("retries").fold(3)(_.toInt)
println(retries)
}
}Pemeriksaan Singkat
Uji pemahaman Anda tentang cara mengambil nilai Option.
Ringkasan
Anda telah mempelajari cara mengambil nilai Option dengan aman:
getOrElse(default)mengembalikan nilai atau nilai bawaan (dievaluasi secara malas)orElse(fallback)mengembalikan Some pertama atau Option cadanganfold(default)(f)mentransformasi Some dan menggunakan nilai bawaan untuk None dalam satu langkah- Hindari
get, yang melempar pengecualian pada None
Pertanyaan yang Sering Diajukan
Apakah pelajaran “getOrElse dan fold” gratis?
Ya — teks lengkap “getOrElse dan fold” 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 “getOrElse dan fold”?
Ekstrak nilai. 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 “getOrElse dan fold” 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.