Operator !!
Paksa nilai non-null dan pahami risikonya
Operator !! 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.
Memaksa Menjadi Tidak Null
Kadang-kadang Anda yakin suatu nilai yang mungkin null sebenarnya tidak null, tetapi kompiler masih mengeluh.
Operator penegasan tidak null !! memberi tahu kompiler untuk memercayai Anda dan memperlakukan nilai tersebut sebagai nilai yang tidak null.
Penggunaan Dasar
Menambahkan !! mengubah tipe yang mungkin null menjadi padanannya yang tidak null.
Jika nilainya benar-benar tidak null, kode tersebut bekerja persis seperti pemanggilan biasa.
fun main() {
val name: String? = "Kotlin"
println(name!!.length)
}Bahayanya
Jika nilainya ternyata null, !! akan melempar NullPointerException tepat di sana.
Inilah satu-satunya tempat Kotlin membiarkan NPE terjadi, dan sepenuhnya menjadi tanggung jawab Anda.
fun main() {
val name: String? = null
try {
println(name!!.length)
} catch (e: NullPointerException) {
println("Boom: NullPointerException")
}
}Alasan Operator Ini Ada
Operator ini sengaja dibuat mencolok. Dua tanda seru akan terlihat saat peninjauan kode dan menandai bagian ketika Anda melewati jaring pengaman.
Operator ini ada untuk kasus-kasus langka ketika Anda benar-benar mengetahui sesuatu yang tidak diketahui kompiler.
Pemanggilan Aman Biasanya Lebih Baik
Dalam sebagian besar situasi, pemanggilan aman ?. dengan Elvis ?: lebih aman dan sama singkatnya.
Bandingkan kedua pendekatan di bawah ini untuk tujuan yang sama.
fun main() {
val name: String? = null
val safeLength = name?.length ?: 0
println(safeLength)
}Hindari Merangkai !!
Jangan pernah merangkai beberapa !! seperti a!!.b!!.c. Jika terjadi kegagalan, Anda tidak dapat mengetahui bagian mana yang bernilai null.
Uraikan ekspresi tersebut atau gunakan pemanggilan aman.
fun main() {
val text: String? = "hi"
// bad style: text!!.uppercase()!! is hard to debug
val good = text?.uppercase() ?: ""
println(good)
}Penggunaan yang Sah
Salah satu kasus yang dapat diterima adalah nilai yang Anda tetapkan sebelumnya dan Anda ketahui sudah diinisialisasi saat ini.
Meski begitu, pilih lateinit atau susun ulang kode jika memungkinkan.
fun main() {
var config: String? = null
config = "loaded"
// we just assigned it, so !! is safe here
println(config!!.uppercase())
}Membaca Jejak Tumpukan
Ketika !! gagal, pengecualian menunjuk ke baris yang tepat. Ketepatan ini adalah satu-satunya keuntungan dibandingkan hasil salah yang muncul tanpa tanda.
Gunakan pesan tersebut untuk menemukan dan memperbaiki asumsi yang keliru.
fun length(text: String?): Int {
return text!!.length
}
fun main() {
println(length("abc"))
// length(null) would throw on the !! line
}Menghapus !! melalui Refaktor
Sebagian besar !! dapat dihapus dengan menangani null secara tepat. Di bawah ini, nilai cadangan Elvis membuat fungsi tersebut menangani semua kemungkinan tanpa menyebabkan program gagal.
fun length(text: String?): Int {
return text?.length ?: 0
}
fun main() {
println(length("abc"))
println(length(null))
}Aturan Praktis
Anggap setiap !! sebagai sebuah pertanyaan: apakah saya benar-benar yakin bahwa nilai ini tidak akan pernah null?
- Jika ya dan kasusnya langka → dapat diterima
- Jika ragu → gunakan
?.dan?:
Menggabungkan Semuanya
Operator !! adalah alat yang tajam:
- Operator ini memaksa nilai yang mungkin null menjadi tipe yang tidak null
- Operator ini melempar NullPointerException jika nilainya null
- Hampir selalu, pilih pemanggilan aman dan Elvis
fun main() {
val sure: String? = "definitely here"
println(sure!!.length)
val maybe: String? = null
println(maybe?.length ?: -1)
}Pemeriksaan Cepat
Uji pemahaman Anda tentang operator penegasan tidak null.
Ringkasan
Anda telah mempelajari operator !!:
- Operator ini menegaskan bahwa nilai yang mungkin null tidak bernilai null
- Operator ini melempar NullPointerException jika penegasan tersebut keliru
- Operator ini sebaiknya menjadi pilihan terakhir, bukan kebiasaan
Selanjutnya Anda akan melihat bagaimana nullability datang dari Java melalui tipe platform.
Belajar Kotlin dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 51
- Pelajaran
- 203
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Operator !!” gratis?
Ya — teks lengkap “Operator !!” 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 “Operator !!”?
Paksa nilai non-null dan pahami risikonya 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 “Operator !!” 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.