0Pricing
Android Academy · Pelajaran

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 KotlinNullPointerException

Utamakan 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 ?: 0

Validasi 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

  1. Tipe Nullable vs Non-Null
  2. Pemanggilan Aman dan Elvis
  3. Fungsi Scope let, also, dan
  4. Menghindari NullPointerExceptions
← Kembali ke Android Academy