NullPointerException Pada Pemrograman Kotlin

Assalamualaikum Warahmatullahi Wabarakatuh. Seorang pengembang aplikasi atau disebut programmer, pasti sering mengalami error NullPointerException, pesan ini terjadi karena Class, Objek, Array ataupun Method tidak di instansiasi dengan benar, biasanya akan mengakibatkan aplikasi yang kita jalankan menjadi Force Close, khususnya untuk aplikasi yang berbasis android error ini sering terjadi bahkan tanpa diketahui oleh seorang programmer dikarenakan Compiler tidak menandai pointer yang akan berpotensi Null, seperti pada pemrograman Java.

NullPointerException Pada Pemrograman Kotlin

Jika masih bingung, berikut ini beberapa penyebab error NullPointerException diantaranya :
  • Mengakses / Mengubah slot dari sebuah array null
  • Mengambil nilai panjang dari sebuah array null
  • Mengakses / Mengubah field dari object null
  • Memanggil Instan Method dari sebuah object null

Berbeda dengan pemrograman Java, pada pemrograman kotlin terdapat fitur / kelebihan yang saya suka yaitu Aman dari Null, Compiler secara sistematis akan menandai pointer yang berpotensi null, Pada pembahasan ini WILDAN TECHNO ART akan menjelaskan bagaimana cara mencegah dan mengatasi agar koding yang kita buat aman dari NullPointerException.

Tipe Nullable dan Jenis Non-Null

Di dalam kotlin dibedakan menjadi 2 yaitu references yang bisa null (nullable references) dan yang tidak bisa null (non-null references). Sebagai contoh, saya akan membuat sebuah variable Integer yang tidak bisa Null :

var objek: Int = 771
    objek = null //Akan Terjadi Error
    print(objek)

Pointer akan menandai pada barisan tersebut terdapat error, dan jika dijalankan hasilnya akan seperti ini.
Non-Null Variable Example
Non-Null Variable Example

Untuk memungkinkan variable tersebut bisa menjadi null, kalian dapat mendeklarasikan variable sebagai Integer nullable dengan menggunakan simbol ?, seperti berikut ini :

var objek2: String? = "Wildan"
    objek2 = null //Aman
    print(objek2)

Jika kita jalankan, hasilnya akan berupa Null, seperti ini.
Nullable Variable Example
Nullable Variable Example

Dengan begitu, kalian akan terhindar dari NullPointerException.  Tetapi kalian tidak bisa mengeksekusi panjang nilai yang terdapat pada varieble objek2 dikarenakan sudah menjadi Null, Contohnya seperti ini :

var objek2: String? = "Wildan"
    objek2 = null
    print(objek2.length) // Akan Terjadi Error Dikarenakan Null

Agar kita bisa mengakses panjang nilai dari variable tersebut, ubahlah menjadi Non-Null seperti ini :

var objek2: String = "Wildan"
    print(objek2.length) // Aman

JIka kita jalankan, Dengan begitu tidak akan mengalami NullPointerException.
Non-Null Variable Example2
Non-Null Variable Example2

Memeriksa Kondisi Null

Kita bisa menggunakan statement if-else untuk mengecek apakah variable tersebut Nullable atau Non-Null, Contohnya seperti ini :

if(objek2 != null){
        print("Panjang String ${objek2.length}")
    }else{
        print("Kosong")
    }

Jika objek2 Null, program akan mengembalikan nilai String "Kosong" dan jika tidak null, program akan menampilkan panjang char yang terdapat pada objek2.

Baca Juga :

Selain itu, Kalian dapat secara eksplisit (Jelas) apakah objek2 bernilai null,  dan menangani dua opsi secara terpisah, seperti berikut ini :

val W = if(objek2 != null)objek2.length else "Kosong"
print(W)

Penggunaan Safe Calls (?.)

Contoh sederhana penggunaan Safe Calls, seperti berikut ini :

var objek2: String? = null
print(objek2?.length)

Jika objek2 tidak null (non-null) program akan mengembalikan .length (panjang nilai) yang terdapat pada objek2 dan jika nullable, variable tersebut akan mengembalikan nilai null.

Jika kita membuat sebuah list dan pada list tersebut terdapat Null, agar aman dari error, kita bisa menggunakan Safe Calls (?.) bersama dengan let, seperti contoh berikut ini :

val siswa: List = listOf("Wildan", "Azis", null)
    for (item in siswa) {
        item?.let { println(it) } // Mencetak Wildan, Azis dan mengabaikan Null
    }

Program tersebut akan mencetak semua data yang terdapat pada variable siswa, dan mengabaikan null, sehingga hasilya akan seperti ini.
Safe Calls (?.) Example Tes
Safe Calls (?.) Example Tes

Dengan begitu program tersebut akan aman dari error, walaupun terdapat null pada list siswa.

Elvis Operator

Variable CODE akan mempunyai nilai ID.length (panjang char dari ID) jika non-null/, dan jika ID nullable, variable CODE akan bernilai 0 :

var ID: String? = "2234"
    val CODE: Int = if(ID != null)ID.length else 0
    print(CODE)

Seperti penggunaan if-else, kita juga bisa menulisnya dengan menggunakan simbol ?: seperti berikut ini :

val CODE: Int = ID?.length ?: 0

Jika opsi di sebelah kiri ?: bernilai non-null, operator elvis akan mengembalikan nilainya, dan jika null, opsi yang berada di sebelah kanan ?: yang akan di eksekusi.

Operator !!

Pada contoh berikut ini, jika variable ID non-null, maka program akan mengembalikan nilainya, jika tidak, program akan mengembalikan nilainya menjadi null

val CODE: Int = ID!!.length

Dengan ini program akan aman dari NPE, jika variable ID bernilai null.

Safe Cast

Safe Cast bisa ditulis seperti berikut ini :

val CODE: Int? = ID as? Int

Program tersebut menjelaskan apakah variable ID sebagai Integer, jika iya maka program akan mengembalikan nilainnya, dan jika tidak atau bukan Integer, program akan mengembalikan nilai Null, Untuk contoh sederhananya seperti betikut ini :

var ID: String = "Wildan"
    val CODE: Int? = ID as? Int
    print(CODE)

Program tersebut akan mengembalikan nilai Null, karena variable ID mempunyai tipe data String bukan Integer, jika kita ubah menjadi Integer, program akan mengembalikan nilai yang ada pada ID. dengan begitu kita akan aman dari ClassCastException.

Koleksi Jenis Nullable

Jika kalian memiliki kumpulan elemen tipe nullable dan ingin memfilter elemen non-null(tidak null), Kalian bisa melakukannya dengan menggunakan filterNotNull, Seperti berikut ini :

val data_siswa: List = listOf("Wildan", null, null, "Alvians")
    val filterNull: List = data_siswa.filterNotNull()
    for(item in filterNull){
        item.let { println(it) }
    }

Jika kita jalankan, program hanya akan mengeksekusi elemen non-null(tidak null) saja dan tidak akan menampilkan elemen null, seperti berikut ini.
Collections of Nullable Type - Example
Collections of Nullable Type - Example

Itulah ulasan dari saya mengenai Null Safety pada Kotlin, jadi bagaimana, apakah kalian tertarik pada pemrograman Kotlin dan ingin mempelajarinya lebih jauh lagi, untuk itu jangan lupa Follow dan Subscribe, agar mendapat update terbaru dari blog ini. Mohon Maaf bila ada kesalahan kata-kata yang kurang tepat dan pembahasan yang kurang jelas, dikarenakan saya masih belajar dan berusaha memperbaiki kesalahan tersebut, jika ada yang ingin ditanyakan silakan isi komentar di bawah ini, Terakhir dari saya, Wassalamualaikum Warahmatullahi Wabarakatuh.

Wildan M Athoillah
Wildan M Athoillah Blogger dan spesialis pembuat aplikasi android.