Menghindari NullPointerExceptions
Pola untuk kode yang aman.
Menghindari NullPointerExceptions adalah pelajaran Android 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 Android Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Android Academy mencakup 4 pelajaran total.
Tujuan: Tanpa NPE
NullPointerException, atau NPE, terjadi ketika kode menggunakan sesuatu yang sebenarnya null. Kotlin dirancang untuk membuat kejadian ini jarang terjadi.
Pelajaran ini menggabungkan alat-alat yang telah Anda pelajari dan memperingatkan tentang beberapa cara NPE masih dapat muncul.
Operator !!
Asersi tidak-null !! memberi tahu kompiler untuk memercayai Anda bahwa suatu nilai tidak null. Jika Anda keliru, operator ini akan menghasilkan NPE.
Operator ini menghilangkan keamanan, jadi gunakanlah sesekali dan hanya ketika Anda benar-benar yakin.
fun main() {
val name: String? = "Ada"
println(name!!.length) // works, name is not null
}!! Dapat Menyebabkan Kerusakan
Jika nilainya benar-benar null, !! akan menghasilkan NullPointerException tepat pada baris tersebut.
Inilah cara utama untuk memunculkan kembali masalah yang sebenarnya dicegah oleh Kotlin. Hindari !! jika pemanggilan aman atau Elvis dapat digunakan.
val name: String? = null
println(name!!.length)
// throws KotlinNullPointerExceptionUtamakan Alternatif yang Aman
Hampir semua penggunaan !! dapat ditulis ulang dengan ?. dan ?:. Versi yang aman tidak dapat menyebabkan kerusakan.
Bandingkan bentuk yang berisiko dan yang aman di bawah ini.
// Risky:
val len1 = name!!.length
// Safe:
val len2 = name?.length ?: 0Validasi Sejak Awal
Tangani null di batas kode Anda, lalu gunakan nilai yang tidak null di bagian dalam. Gunakan Elvis bersama return atau throw untuk menolak input yang tidak tersedia sejak awal.
Setelah pemeriksaan tersebut, nilai akan diubah secara cerdas menjadi tidak null.
fun length(s: String?): Int {
val text = s ?: return 0
return text.length
}requireNotNull
Ketika null benar-benar menandakan adanya bug, requireNotNull menghasilkan galat yang jelas dan mengembalikan nilai yang tidak null.
Fungsi ini lebih deskriptif daripada !! karena Anda dapat menambahkan pesan.
fun start(config: String?) {
val c = requireNotNull(config) { "config missing" }
println(c.length)
}Tipe Platform dari Java
Nilai yang berasal dari Java memiliki status nullabilitas yang tidak diketahui dan disebut tipe platform. Kotlin tidak dapat menjamin bahwa nilai tersebut tidak null.
Ketika menggunakan pustaka Java, nyatakan tipe yang diharapkan secara eksplisit dan tangani null secara defensif.
// From Java: String maybe = obj.getName();
val name: String? = obj.name // be safe
println(name?.length ?: 0)Jebakan lateinit
lateinit var memungkinkan Anda menunda inisialisasi properti yang tidak null. Namun, menggunakannya sebelum diberi nilai akan menghasilkan eksepsi.
Gunakan lateinit hanya ketika Anda yakin nilainya telah ditetapkan sebelum diakses.
lateinit var config: String
fun read() {
println(config.length)
// crashes if config was never set
}Nilai Bawaan sebagai Pengganti Null
Sering kali Anda dapat menghindari nullabilitas sepenuhnya dengan memilih nilai bawaan yang sesuai. String kosong atau daftar kosong sering kali lebih baik daripada null.
Semakin sedikit tipe yang dapat bernilai null, semakin kecil kemungkinan terjadinya NPE.
fun main() {
val tags: List<String> = emptyList()
println(tags.size) // 0, never null
}Alur yang Aman
Program ini membaca nilai opsional, mengubahnya dengan aman, dan selalu menghasilkan hasil. Tidak ada !!, tidak ada kerusakan.
Inilah gaya yang perlu dituju dalam kode Android nyata.
fun main() {
val input: String? = null
val result = input?.trim()?.uppercase() ?: "N/A"
println(result) // prints: N/A
}Praktik Terbaik
Utamakan tipe yang tidak null, tangani null di batas kode dengan Elvis, dan gunakan ?.let untuk tindakan opsional. Simpan !! untuk kasus langka ketika null mustahil terjadi.
Ikuti kebiasaan ini, dan NullPointerExceptions akan menjadi sesuatu dari masa lalu.
val safe = data?.value ?: default
data?.let { handle(it) }Pemeriksaan Singkat
Uji pemahaman Anda tentang cara menghindari NullPointerExceptions.
Ringkasan
NPE dalam Kotlin biasanya berasal dari !!, tipe platform dari Java, atau nilai lateinit yang belum diinisialisasi. Hindari hal-hal tersebut dengan mengutamakan tipe yang tidak null dan operator yang aman.
Gunakan ?., ?:, ?.let, dan validasi seperti requireNotNull agar kode tidak mengalami kerusakan. Kini Anda telah menyelesaikan dasar-dasar penting keamanan null di Kotlin.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Menghindari NullPointerExceptions” gratis?
Ya — teks lengkap “Menghindari NullPointerExceptions” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Android Academy, upgrade ke CoddyKit PRO. Kursus Android Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Menghindari NullPointerExceptions”?
Pola untuk kode yang aman. Kamu berlatih Android 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 Android Academy?
Tidak diperlukan pengalaman sebelumnya. Android 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 “Menghindari NullPointerExceptions” 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 Android Academy ini?
Ya. Setiap pelajaran Android 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
- Tipe Nullable vs Non-Null
- Pemanggilan Aman dan Elvis
- Fungsi Scope let, also, dan
- Menghindari NullPointerExceptions