Option dan Nullable: Kapan Menggunakan Masing-Masing
Bandingkan tipe Option milik Arrow dengan tipe nullable Kotlin dan pilih yang sesuai.
Option dan Nullable: Kapan Menggunakan Masing-Masing adalah pelajaran Kotlin Academy 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 Kotlin Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Kotlin Academy mencakup 4 pelajaran total.
Dua Cara Merepresentasikan Ketiadaan
Tipe yang Dapat Bernilai Null di Kotlin
T? milik Kotlin adalah pilihan idiomatis untuk merepresentasikan ketiadaan dalam sebagian besar kode Kotlin. Kompilator menerapkan pemeriksaan null, operator pemanggilan aman ?. merangkai pemanggilan dengan baik, dan ?: "default" menyediakan nilai cadangan secara ringkas:
val name: String? = findUser(id)?.name
val display = name ?: "Anonymous"Option<A> milik Arrow
Option membungkus konsep nullable dalam tipe aljabar yang tepat dengan map, flatMap, filter, fold, dan lainnya. Tipe ini terintegrasi secara alami dengan gaya alur fungsional Arrow:
import arrow.core.Option
import arrow.core.Some
import arrow.core.None
import arrow.core.toOption
val opt: Option<String> = "hello".toOption() // Some("hello")
val absent: Option<String> = NoneMengonversi antara Option dan Nullable
Anda dapat mengonversinya dengan bebas: value?.toOption() membungkus nilai nullable menjadi Option; option.getOrNull() mengekstrak nilainya atau null; option.getOrElse { default } menyediakan nilai cadangan:
val opt: Option<String> = nullableString.toOption()
val back: String? = opt.getOrNull()map dan flatMap pada Option
map { } mengubah nilai Some (dan mengembalikan None tanpa perubahan). flatMap { } merangkai operasi yang juga mengembalikan Option:
val length: Option<Int> = "hello".toOption().map { it.length } // Some(5)
val noneLength: Option<Int> = (null as String?).toOption().map { it.length } // Nonefilter pada Option
filter { predicate } mengubah Some menjadi None jika predikatnya bernilai salah:
val positiveAge: Option<Int> = 25.toOption().filter { it > 0 } // Some(25)
val rejectedAge: Option<Int> = (-1).toOption().filter { it > 0 } // Nonefold: Menangani Option
fold(ifEmpty, ifSome) menangani kedua kasus dalam satu ekspresi tanpa pencocokan pola:
val result: String = someOption.fold(
ifEmpty = { "Nothing here" },
ifSome = { value -> "Got: $value" }
)Kapan Memilih Tipe Nullable T?
Pilih nullable Kotlin (T?) ketika:
- Anda menulis kode Kotlin idiomatis yang akan dibaca orang lain
- Anda memerlukan rangkaian operator yang aman terhadap null (
?.,?:) - Tipe tersebut digunakan dalam API yang tidak memakai Arrow
- Performa sangat penting (tanpa overhead boxing)
Kapan Memilih Option<A>
Pilih Option ketika:
- Anda sudah menggunakan alur fungsional Arrow (
map,flatMap) - Anda ingin mengomposisikan nilai opsional dengan
EitheratauRaise - Anda ingin menjadikan ketiadaan eksplisit dalam konteks fungsional umum
- Anda sedang membangun pustaka yang mungkin digunakan oleh pemanggil yang tidak memakai Kotlin
Option di dalam either { }
Di dalam blok either { } milik Arrow, Anda dapat memanggil .bind() pada Option dengan terlebih dahulu mengonversinya menjadi Either:
fun findUserOpt(id: Long): Option<User> = TODO()
fun getUser(id: Long): Either<UserError, User> = either {
findUserOpt(id)
.toEither { UserError.NotFound }
.bind()
}Antipola Option
Jangan gunakan Option di mana-mana hanya karena tipe itu tersedia. Dalam Kotlin, String? lebih jelas daripada Option dalam sebagian besar kode aplikasi. Gunakan Option hanya ketika operator fungsionalnya benar-benar memberikan manfaat.
Pemeriksaan Singkat
Apa yang dikembalikan None.map { it.length } dalam Option milik Arrow?
Rangkuman: Option dan Nilai Nullable
Inti pembelajaran:
- Kotlin
T?: idiomatis untuk sebagian besar kode; diberlakukan oleh kompiler; menggunakan?.dan?: - Arrow
Option: tipe aljabar dengan operator fungsional (map,flatMap,fold,filter) - Lakukan konversi dengan
.toOption()dan.getOrNull() - Pilih
T?untuk Kotlin yang idiomatis; pilihOptionketika menyusun alur fungsional dengan Arrow
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Option dan Nullable: Kapan Menggunakan Masing-Masing” gratis?
Ya — teks lengkap “Option dan Nullable: Kapan Menggunakan Masing-Masing” 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 “Option dan Nullable: Kapan Menggunakan Masing-Masing”?
Bandingkan tipe Option milik Arrow dengan tipe nullable Kotlin dan pilih yang sesuai. 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 3 dari 4.
Berapa lama pelajaran “Option dan Nullable: Kapan Menggunakan Masing-Masing” 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
- Either : Penanganan Error Bertipe Tanpa Exception
- DSL Raise Arrow: Menyusun Error Bertipe
- Option dan Nullable: Kapan Menggunakan Masing-Masing
- Pemodelan Domain Fungsional dengan Tipe Inti Arrow