Kotlin Academy · Pelajaran

Operator !!

Paksa nilai non-null dan pahami risikonya

Pelajaran 3 dari 413 langkah

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.

Gratis untuk memulai

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.

Semua pelajaran dalam kursus ini

  1. Tipe Nullable dan Non-Null
  2. Pemanggilan Aman dan Elvis
  3. Operator !!
  4. Tipe Platform
← Kembali ke Kotlin Academy