Mengelakkan NullPointerExceptions
Corak untuk kod yang selamat.
Mengelakkan NullPointerExceptions ialah pelajaran Android Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Android Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Android Academy merangkumi sejumlah 4 pelajaran.
Matlamat: Tiada NPE
NullPointerException, atau NPE, berlaku apabila kod menggunakan sesuatu yang sebenarnya bernilai nol. Kotlin direka supaya perkara ini jarang berlaku.
Pelajaran ini menggabungkan alat yang telah Anda pelajari dan menerangkan beberapa cara NPE masih boleh berlaku tanpa disedari.
Operator !!
Pengesahan bukan nol !! memberitahu pengompil bahawa Anda pasti sesuatu nilai bukan nol. Jika Anda tersilap, operator ini akan mencetuskan NPE.
Operator ini menghapuskan keselamatan, jadi gunakannya dengan jarang dan hanya apabila Anda benar-benar pasti.
fun main() {
val name: String? = "Ada"
println(name!!.length) // works, name is not null
}!! Boleh Menyebabkan Ranap
Jika nilainya benar-benar nol, !! akan mencetuskan NullPointerException tepat pada baris tersebut.
Inilah cara utama untuk mengembalikan masalah yang cuba dicegah oleh Kotlin. Elakkan !! apabila panggilan selamat atau Elvis boleh digunakan.
val name: String? = null
println(name!!.length)
// throws KotlinNullPointerExceptionUtamakan Pilihan yang Selamat
Hampir semua penggunaan !! boleh ditulis semula menggunakan ?. dan ?:. Versi selamat tidak boleh menyebabkan ranap.
Bandingkan bentuk berisiko dengan bentuk selamat di bawah.
// Risky:
val len1 = name!!.length
// Safe:
val len2 = name?.length ?: 0Sahkan Lebih Awal
Kendalikan nol pada sempadan kod Anda, kemudian gunakan nilai bukan nol di bahagian dalam. Gunakan Elvis bersama return atau throw untuk menolak input yang tiada sejak awal.
Selepas pengawal itu, nilai akan ditukar secara pintar kepada nilai bukan nol.
fun length(s: String?): Int {
val text = s ?: return 0
return text.length
}requireNotNull
Apabila nol benar-benar menandakan pepijat, requireNotNull mencetuskan ralat yang jelas dan mengembalikan nilai bukan nol.
Fungsi ini lebih deskriptif berbanding !! kerana Anda boleh menambah mesej.
fun start(config: String?) {
val c = requireNotNull(config) { "config missing" }
println(c.length)
}Jenis Platform daripada Java
Nilai yang datang daripada Java mempunyai kebolehnolan yang tidak diketahui dan dipanggil jenis platform. Kotlin tidak dapat menjamin bahawa nilai tersebut bukan nol.
Apabila menggunakan pustaka Java, nyatakan jenis yang dijangka secara jelas dan kendalikan nol secara defensif.
// From Java: String maybe = obj.getName();
val name: String? = obj.name // be safe
println(name?.length ?: 0)Perangkap lateinit
lateinit var membolehkan Anda menangguhkan pemulaan sifat bukan nol. Namun, menggunakannya sebelum penetapan akan mencetuskan pengecualian.
Gunakan lateinit hanya apabila Anda pasti nilai itu ditetapkan sebelum sebarang capaian.
lateinit var config: String
fun read() {
println(config.length)
// crashes if config was never set
}Nilai Lalai dan Bukannya Nol
Selalunya Anda boleh mengelakkan kebolehnolan sepenuhnya dengan memilih nilai lalai yang sesuai. Rentetan kosong atau senarai kosong kerap kali lebih baik daripada nol.
Lebih sedikit jenis yang boleh menjadi nol bermakna lebih sedikit kemungkinan berlakunya NPE.
fun main() {
val tags: List<String> = emptyList()
println(tags.size) // 0, never null
}Saluran Paip yang Selamat
Program ini membaca nilai pilihan, mengubahnya dengan selamat, dan sentiasa menghasilkan keputusan. Tiada !!, tiada ranap.
Inilah gaya yang patut disasarkan dalam kod Android sebenar.
fun main() {
val input: String? = null
val result = input?.trim()?.uppercase() ?: "N/A"
println(result) // prints: N/A
}Amalan Terbaik
Utamakan jenis bukan nol, kendalikan nol pada sempadan menggunakan Elvis, dan gunakan ?.let untuk tindakan pilihan. Simpan !! untuk kes jarang berlaku apabila nol mustahil.
Amalkan tabiat ini dan NullPointerExceptions akan menjadi perkara silam.
val safe = data?.value ?: default
data?.let { handle(it) }Semakan Pantas
Uji pemahaman Anda tentang cara mengelakkan NullPointerExceptions.
Imbas Kembali
NPE dalam Kotlin biasanya berpunca daripada !!, jenis platform daripada Java, atau nilai lateinit yang belum dimulakan. Elakkannya dengan mengutamakan jenis bukan nol dan operator selamat.
Gunakan ?., ?:, ?.let, dan pengesahan seperti requireNotNull untuk memastikan kod tidak ranap. Kini Anda telah melengkapkan asas keselamatan Kotlin terhadap nol.
Pelajari Kotlin dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 36
- Pelajaran
- 152
Soalan Lazim
Adakah pelajaran “Mengelakkan NullPointerExceptions” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Android Academy, termasuk “Mengelakkan NullPointerExceptions”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Android Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Mengelakkan NullPointerExceptions”?
Corak untuk kod yang selamat. Anda berlatih Android Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Android Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Android Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.
Berapa lamakah pelajaran “Mengelakkan NullPointerExceptions” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Android Academy ini?
Ya. Setiap pelajaran Android Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Jenis Nullable berbanding Tidak Null
- Panggilan Selamat dan Elvis
- let, also dan Fungsi Scope
- Mengelakkan NullPointerExceptions