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.
Jika masih bingung, berikut ini beberapa penyebab error NullPointerException diantaranya :
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 :
Pointer akan menandai pada barisan tersebut terdapat error, dan jika dijalankan hasilnya akan seperti ini.
Untuk memungkinkan variable tersebut bisa menjadi null, kalian dapat mendeklarasikan variable sebagai Integer nullable dengan menggunakan simbol ?, seperti berikut ini :
Jika kita jalankan, hasilnya akan berupa Null, seperti ini.
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 :
Agar kita bisa mengakses panjang nilai dari variable tersebut, ubahlah menjadi Non-Null seperti ini :
JIka kita jalankan, Dengan begitu tidak akan mengalami NullPointerException.
Memeriksa Kondisi Null
Kita bisa menggunakan statement if-else untuk mengecek apakah variable tersebut Nullable atau Non-Null, Contohnya seperti ini :
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 :
Penggunaan Safe Calls (?.)
Contoh sederhana penggunaan Safe Calls, seperti berikut ini :
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 :
Program tersebut akan mencetak semua data yang terdapat pada variable siswa, dan mengabaikan null, sehingga hasilya akan seperti ini.
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 :
Seperti penggunaan if-else, kita juga bisa menulisnya dengan menggunakan simbol ?: seperti berikut ini :
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
Dengan ini program akan aman dari NPE, jika variable ID bernilai null.
Safe Cast
Safe Cast bisa ditulis seperti berikut ini :
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 :
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 :
Jika kita jalankan, program hanya akan mengeksekusi elemen non-null(tidak null) saja dan tidak akan menampilkan elemen null, seperti berikut ini.
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.
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
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 |
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 |
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 |
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 :
- Tutorial Input & Output Pemrograman Kotlin
- Tutorial Dasar Pemrograman Kotlin
- Percabangan Kotlin : if, if-else, if-else-if dan when (switch)
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 |
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 |
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.