1. Sebelum memulai
Codelab ini mengajarkan tentang nullability dan pentingnya keamanan null. Nullability adalah konsep yang umumnya ditemukan dalam banyak bahasa pemrograman. Hal ini mengacu pada kemampuan variabel untuk tidak memiliki nilai. Di Kotlin, perlakuan pada nullability sengaja diatur untuk mencapai keamanan null.
Prasyarat
- Pengetahuan tentang dasar-dasar pemrograman Kotlin, termasuk variabel, yang mengakses metode dan properti dari variabel, serta fungsi
println()danmain() - Pemahaman tentang kondisional Kotlin, termasuk pernyataan
if/elsedan ekspresi Boolean
Yang akan Anda pelajari
- Pengertian
null. - Perbedaan antara jenis nullable dan non-nullable.
- Pengertian keamanan
null, nilai pentingnya, dan cara Kotlin mencapai keamanannull. - Cara mengakses metode dan properti variabel nullable dengan
?.operator panggilan aman dan!!operator pernyataan non-null. - Cara melakukan pemeriksaan
nulldengan kondisiif/else. - Cara mengonversi variabel nullable menjadi jenis non-nullable dengan ekspresi
if/else. - Cara memberikan nilai default saat variabel nullable adalah
nulldengan ekspresiif/elseatau operator Elvis?:.
Yang akan Anda butuhkan
- Browser web dengan akses ke Kotlin Playground
2. Menggunakan variabel nullable
Apa itu null?
Di Unit 1, Anda telah mempelajari bahwa saat mendeklarasikan variabel, Anda harus segera menetapkan nilainya. Misalnya, saat mendeklarasikan variabel favoriteActor, Anda dapat langsung menetapkan nilai string "Sandra Oh" padanya.
val favoriteActor = "Sandra Oh"

Namun, bagaimana jika Anda tidak memiliki aktor favorit? Anda mungkin ingin menetapkan nilai "Nobody" atau "None" ke variabel. Ini bukan pendekatan yang baik karena program Anda menafsirkan variabel favoriteActor memiliki nilai "Nobody" atau "None", dan bukan tidak ada nilai sama sekali. Di Kotlin, Anda dapat menggunakan null untuk menunjukkan bahwa tidak ada nilai yang terkait dengan variabel.

Untuk menggunakan null dalam kode, ikuti langkah-langkah berikut:
- Di Kotlin Playground, ganti konten di bagian isi fungsi
main()dengan variabelfavoriteActoryang ditetapkan kenull:
fun main() {
val favoriteActor = null
}
- Cetak nilai variabel
favoriteActordengan fungsiprintln(), lalu jalankan program ini:
fun main() {
val favoriteActor = null
println(favoriteActor)
}
Outputnya akan terlihat seperti cuplikan kode ini:
null
Penetapan ulang variabel dengan null
Sebelumnya, Anda sudah mempelajari bahwa Anda dapat menetapkan ulang variabel yang ditentukan dengan kata kunci var ke nilai yang berbeda dari jenis yang sama. Misalnya, Anda dapat menetapkan ulang variabel name yang dideklarasikan dengan satu nama ke nama lain selama nama baru berjenis String.
var favoriteActor: String = "Sandra Oh"
favoriteActor = "Meryl Streep"
Setelah mendeklarasikan variabel, ada kalanya Anda ingin menetapkan variabel ke null. Misalnya, setelah menyatakan aktor favorit Anda, Anda memutuskan bahwa Anda tidak ingin mengungkapkan aktor favorit Anda sama sekali. Dalam hal ini, sebaiknya tetapkan variabel favoriteActor ke null.
Memahami variabel non-nullable dan nullable
Untuk menetapkan ulang variabel favoriteActor ke null, ikuti langkah-langkah berikut:
- Ubah kata kunci
valmenjadi kata kuncivar, lalu tentukan bahwa variabelfavoriteActoradalah jenisStringdan tetapkan ke nama aktor favorit Anda:
fun main() {
var favoriteActor: String = "Sandra Oh"
println(favoriteActor)
}
- Hapus fungsi
println():
fun main() {
var favoriteActor: String = "Sandra Oh"
}
- Tetapkan ulang variabel
favoriteActorkenull, lalu jalankan program ini:
fun main() {
var favoriteActor: String = "Sandra Oh"
favoriteActor = null
}
Anda mendapatkan pesan error ini:

Di Kotlin, ada perbedaan antara jenis nullable dan non-nullable:
- Jenis nullable adalah variabel yang dapat menyimpan
null. - Jenis non-null adalah variabel yang tidak dapat menyimpan
null.
Suatu jenis hanya nullable jika Anda secara eksplisit mengizinkannya untuk menyimpan null. Seperti yang dinyatakan dalam pesan error, jenis data String adalah jenis non-nullable sehingga Anda tidak dapat menetapkan ulang variabel ke null.

Untuk mendeklarasikan variabel nullable di Kotlin, Anda perlu menambahkan operator ? di akhir jenis. Misalnya, jenis String? dapat menyimpan string atau null, sedangkan jenis String hanya dapat menyimpan string. Untuk mendeklarasikan variabel nullable, Anda harus menambahkan jenis nullable secara eksplisit. Tanpa jenis nullable, compiler Kotlin menyimpulkan bahwa variabel itu berjenis non-nullable.
- Ubah jenis variabel
favoriteActordari jenis dataStringmenjadi jenis dataString?:
fun main() {
var favoriteActor: String? = "Sandra Oh"
favoriteActor = null
}
- Cetak variabel
favoriteActorsebelum dan sesudah penetapan ulangnull, lalu jalankan program ini:
fun main() {
var favoriteActor: String? = "Sandra Oh"
println(favoriteActor)
favoriteActor = null
println(favoriteActor)
}
Outputnya akan terlihat seperti cuplikan kode ini:
Sandra Oh null
Variabel favoriteActor awalnya berisi string, lalu ditetapkan ulang menjadi null.
Cobalah
Setelah dapat menggunakan jenis String? nullable, dapatkah Anda melakukan inisialisasi pada variabel dengan nilai Int dan menetapkannya kembali ke null?
Menulis nilai Int nullable
- Hapus semua kode di fungsi
main():
fun main() {
}
- Buat variabel
numberdari jenisIntnullable, lalu tetapkan nilai10padanya:
fun main() {
var number: Int? = 10
}
- Cetak variabel
number, lalu jalankan program ini:
fun main() {
var number: Int? = 10
println(number)
}
Outputnya seperti yang diharapkan:
10
- Tetapkan ulang variabel
numberkenulluntuk mengonfirmasi bahwa variabel tersebut nullable:
fun main() {
var number: Int? = 10
println(number)
number = null
}
- Tambahkan pernyataan
println(number)lain sebagai baris terakhir program, lalu jalankan:
fun main() {
var number: Int? = 10
println(number)
number = null
println(number)
}
Outputnya seperti yang diharapkan:
10 null
3. Menangani variabel nullable
Sebelumnya, Anda telah mempelajari cara menggunakan operator . untuk mengakses metode dan properti variabel non-nullable. Di bagian ini, Anda akan mempelajari cara menggunakannya untuk mengakses metode dan properti variabel nullable.
Untuk mengakses properti variabel favoriteActor non-nullable, ikuti langkah-langkah berikut:
- Hapus semua kode dalam fungsi
main(), lalu deklarasikan variabelfavoriteActordari jenisStringdan tetapkan ke nama aktor favorit Anda:
fun main() {
var favoriteActor: String = "Sandra Oh"
}
- Cetak jumlah karakter di nilai variabel
favoriteActordengan propertilength, lalu jalankan program ini:
fun main() {
var favoriteActor: String = "Sandra Oh"
println(favoriteActor.length)
}
Outputnya seperti yang diharapkan:
9
Ada sembilan karakter dalam nilai variabel favoriteActor, yang mencakup spasi. Jumlah karakter pada nama aktor favorit Anda mungkin berbeda.
Mengakses properti variabel nullable
Misalkan Anda ingin membuat variabel favoriteActor nullable agar orang yang tidak memiliki aktor favorit dapat menetapkan variabel ke null.
Untuk mengakses properti variabel favoriteActor nullable, ikuti langkah-langkah berikut:
- Ubah jenis variabel
favoriteActormenjadi jenis nullable, lalu jalankan program ini:
fun main() {
var favoriteActor: String? = "Sandra Oh"
println(favoriteActor.length)
}
Anda mendapatkan pesan error ini:

Error ini merupakan error kompilasi. Seperti disebutkan dalam codelab sebelumnya, error kompilasi terjadi saat Kotlin tidak dapat mengompilasi kode karena error sintaksis dalam kode Anda.
Kotlin dengan sengaja menerapkan aturan sintaksis agar dapat mencapai keamanan null, yang mengacu pada jaminan bahwa tidak akan ada panggilan yang tidak disengaja pada variabel yang mungkin null. Ini bukan berarti variabel tidak boleh null. Ini berarti, jika anggota variabel diakses, variabel tidak boleh null.
Hal ini penting karena jika ada upaya untuk mengakses anggota variabel yang null - dikenal sebagai referensi null - selama aplikasi berjalan, aplikasi akan error karena variabel null tidak berisi properti atau metode apa pun. Jenis error ini dikenal sebagai error runtime, yang terjadi setelah kode dikompilasi dan dijalankan.
Terkait dengan sifat keamanan null Kotlin, error runtime seperti itu dicegah karena compiler Kotlin memaksakan pemeriksaan null untuk jenis nullable. Pemeriksaan Nullmengacu pada proses pemeriksaan apakah variabel dapat berupa null sebelum diakses dan diperlakukan sebagai jenis non-nullable. Jika ingin menggunakan nilai nullable sebagai jenis non-nullable, Anda harus melakukan pemeriksaan null secara eksplisit. Anda akan mempelajari hal ini nanti di bagian Menggunakan kondisional if/else dalam codelab ini.
Dalam contoh ini, kode gagal pada waktu kompilasi karena referensi langsung ke properti length untuk variabel favoriteActor tidak diizinkan karena ada kemungkinan variabel adalah null.
Selanjutnya, Anda akan mempelajari berbagai teknik dan operator untuk bekerja dengan jenis nullable.
Menggunakan operator panggilan aman ?.
Anda dapat menggunakan operator panggilan aman ?. untuk mengakses metode atau properti dari variabel nullable.
Untuk menggunakan operator panggilan aman ?. guna mengakses metode atau properti, tambahkan simbol ? setelah nama variabel dan akses metode atau properti dengan notasi..
Operator panggilan aman ?. memungkinkan akses yang lebih aman ke variabel nullable karena compiler Kotlin menghentikan upaya akses anggota ke referensi null dan menampilkan null untuk anggota yang diakses.
Untuk mengakses properti variabel favoriteActor nullable secara aman, ikuti langkah-langkah berikut:
- Dalam pernyataan
println(), ganti operator.dengan operator panggilan aman?.:
fun main() {
var favoriteActor: String? = "Sandra Oh"
println(favoriteActor?.length)
}
- Jalankan program ini, lalu verifikasi bahwa outputnya seperti yang diharapkan:
9
Jumlah karakter pada nama aktor favorit Anda mungkin berbeda.
- Tetapkan ulang variabel
favoriteActorkenull, lalu jalankan program ini:
fun main() {
var favoriteActor: String? = null
println(favoriteActor?.length)
}
Anda akan melihat output ini:
null
Perhatikan bahwa program tidak mengalami error meskipun ada upaya untuk mengakses properti length dari variabel null. Ekspresi panggilan aman akan menampilkan null.
Menggunakan operator pernyataan not-null !!
Anda juga dapat menggunakan operator pernyataan not-null !! untuk mengakses metode atau properti dari variabel nullable.

Setelah variabel nullable, Anda harus menambahkan operator pernyataan not-null !!, diikuti dengan operator ., lalu metode atau properti tanpa spasi.
Seperti namanya, jika Anda menggunakan pernyataan not-null !!, artinya Anda menegaskan bahwa nilai variabel bukan null, terlepas dari apakah itu yang terjadi atau tidak.
Tidak seperti operator panggilan aman ?., penggunaan operator pernyataan not-null !! dapat mengakibatkan error NullPointerException ditampilkan jika variabel nullable memang null. Dengan demikian, tindakan tersebut hanya boleh dilakukan jika variabel selalu non-nullable atau penanganan pengecualian yang tepat telah ditetapkan. Jika tidak ditangani, pengecualian akan menyebabkan error runtime. Anda akan mempelajari penanganan pengecualian di unit berikutnya pada kursus ini.
Untuk mengakses properti variabel favoriteActor dengan operator pernyataan not-null !!, ikuti langkah-langkah berikut:
- Tetapkan ulang variabel
favoriteActorke nama aktor favorit Anda, lalu ganti operator panggilan aman?.dengan operator pernyataan not-null!!di pernyataanprintln():
fun main() {
var favoriteActor: String? = "Sandra Oh"
println(favoriteActor!!.length)
}
- Jalankan program ini, lalu verifikasi bahwa outputnya seperti yang diharapkan:
9
Jumlah karakter pada nama aktor favorit Anda mungkin berbeda.
- Tetapkan ulang variabel
favoriteActorkenull, lalu jalankan program ini:
fun main() {
var favoriteActor: String? = null
println(favoriteActor!!.length)
}
Anda mendapatkan error NullPointerException:

Error Kotlin ini menunjukkan bahwa program Anda mengalami error selama eksekusi. Dengan demikian, sebaiknya jangan gunakan operator pernyataan not-null !!, kecuali jika Anda yakin bahwa variabelnya bukan null.
Menggunakan kondisional if/else
Anda dapat menggunakan cabang if dalam kondisional if/else untuk melakukan pemeriksaan null.

Untuk melakukan pemeriksaan null, Anda dapat memeriksa apakah variabel nullable tidak sama dengan null menggunakan operator perbandingan !=.
Pernyataan if/else
Pernyataan if/else dapat digunakan bersama dengan pemeriksaan null sebagai berikut:

Pemeriksaan null berguna saat dikombinasikan dengan pernyataan if/else:
- Pemeriksaan
nulldari ekspresinullableVariable != nulldigunakan sebagai kondisiif. - Isi 1 di dalam cabang
ifmengasumsikan bahwa variabel tersebut bukannull. Oleh karena itu, dalam isi ini, Anda dapat bebas mengakses metode atau properti variabel seolah-olah variabel itu non-nullable tanpa menggunakan operator panggilan aman?.atau operator pernyataan not-null!!. - Isi 2 di dalam cabang
elsemengasumsikan bahwa variabel tersebutnull. Oleh karena itu, dalam isi ini, Anda dapat menambahkan pernyataan yang harus dijalankan saat variabelnyanull. Cabangelsebersifat opsional. Anda hanya dapat menggunakan kondisionalifuntuk menjalankan pemeriksaannulltanpa memberikan tindakan default saat pemeriksaannullgagal.
Pemeriksaan null lebih praktis digunakan dengan kondisi if jika ada beberapa baris kode yang menggunakan variabel nullable. Sebaliknya, operator panggilan aman ?. lebih praktis untuk referensi tunggal variabel nullable.
Untuk menulis pernyataan if/else dengan pemeriksaan null untuk variabel favoriteActor, ikuti langkah-langkah berikut:
- Tetapkan variabel
favoriteActorke nama aktor favorit Anda lagi, lalu hapus pernyataanprintln():
fun main() {
var favoriteActor: String? = "Sandra Oh"
}
- Tambahkan cabang
ifdengan kondisifavoriteActor != null:
fun main() {
var favoriteActor: String? = "Sandra Oh"
if (favoriteActor != null) {
}
}
- Dalam isi cabang
if, tambahkan pernyataanprintlnyang menerima string"The number of characters in your favorite actor's name is ${favoriteActor.length}.", lalu jalankan program ini:
fun main() {
var favoriteActor: String? = "Sandra Oh"
if (favoriteActor != null) {
println("The number of characters in your favorite actor's name is ${favoriteActor.length}.")
}
}
Outputnya seperti yang diharapkan.
The number of characters in your favorite actor's name is 9.
Jumlah karakter pada nama aktor favorit Anda mungkin berbeda.
Perhatikan bahwa Anda dapat mengakses metode panjang nama secara langsung dengan operator . karena Anda mengakses metode length di dalam cabang if setelah pemeriksaan null. Dengan demikian, compiler Kotlin mengetahui bahwa tidak ada kemungkinan bahwa variabel favoriteActor adalah null sehingga compiler mengizinkan akses langsung ke properti.
- Opsional: Tambahkan cabang
elseuntuk menangani situasi ketika nama aktornyanull:
fun main() {
var favoriteActor: String? = "Sandra Oh"
if (favoriteActor != null) {
println("The number of characters in your favorite actor's name is ${favoriteActor.length}.")
} else {
}
}
- Dalam isi cabang
else, tambahkan pernyataanprintlnyang menggunakan string"You didn't input a name.":
fun main() {
var favoriteActor: String? = "Sandra Oh"
if (favoriteActor != null) {
println("The number of characters in your favorite actor's name is ${favoriteActor.length}.")
} else {
println("You didn't input a name.")
}
}
- Tetapkan variabel
favoriteActorkenull, lalu jalankan program ini:
fun main() {
var favoriteActor: String? = null
if(favoriteActor != null) {
println("The number of characters in your favorite actor's name is ${favoriteActor.length}.")
} else {
println("You didn't input a name.")
}
}
Outputnya seperti yang diharapkan:
You didn't input a name.
Ekspresi if/else
Anda juga dapat menggabungkan pemeriksaan null dengan ekspresi if/else untuk mengonversi variabel nullable menjadi variabel non-nullable.

Untuk menetapkan ekspresi if/else ke jenis non-nullable:
- Pemeriksaan
nullableVariable != nullnulldigunakan sebagai kondisiif. - Isi 1 di dalam cabang
ifmengasumsikan bahwa variabel tersebut bukannull. Oleh karena itu, dalam isi ini, Anda dapat mengakses metode atau properti variabel seolah-olah variabel itu non-nullable tanpa operator panggilan aman?.atau operator pernyataan not-null!!. - Isi 2 di dalam cabang
elsemengasumsikan bahwa variabel tersebutnull. Oleh karena itu, dalam isi ini Anda dapat menambahkan pernyataan yang harus dijalankan saat variabelnyanull. - Pada baris terakhir isi 1 dan 2, Anda harus menggunakan ekspresi atau nilai yang menghasilkan jenis non-nullable sehingga jenis itu ditetapkan ke variabel non-nullable saat pemeriksaan
nulllulus atau gagal.
Untuk menggunakan ekspresi if/else guna menulis ulang program sehingga hanya menggunakan satu pernyataan println, ikuti langkah-langkah berikut:
- Tetapkan variabel
favoriteActorke nama aktor favorit Anda:
fun main() {
var favoriteActor: String? = "Sandra Oh"
if (favoriteActor != null) {
println("The number of characters in your favorite actor's name is ${favoriteActor.length}.")
} else {
println("You didn't input a name.")
}
}
- Buat variabel
lengthOfName, lalu tetapkan ke ekspresiif/else:
fun main() {
var favoriteActor: String? = "Sandra Oh"
val lengthOfName = if (favoriteActor != null) {
println("The number of characters in your favorite actor's name is ${favoriteActor.length}.")
} else {
println("You didn't input a name.")
}
}
- Hapus kedua pernyataan
println()dari cabangifdanelse:
fun main() {
var favoriteActor: String? = "Sandra Oh"
val lengthOfName = if (favoriteActor != null) {
} else {
}
}
- Dalam isi cabang
if, tambahkan ekspresifavoriteActor.length:
fun main() {
var favoriteActor: String? = "Sandra Oh"
val lengthOfName = if (favoriteActor != null) {
favoriteActor.length
} else {
}
}
Properti length dari variabel favoriteActor diakses langsung dengan operator ..
- Dalam isi cabang
else, tambahkan nilai0:
fun main() {
var favoriteActor: String? = "Sandra Oh"
val lengthOfName = if (favoriteActor != null) {
favoriteActor.length
} else {
0
}
}
Nilai 0 berfungsi sebagai nilai default jika namanya null.
- Di akhir fungsi
main(), tambahkan pernyataanprintlnyang menggunakan string"The number of characters in your favorite actor's name is $lengthOfName.", lalu jalankan program ini:
fun main() {
var favoriteActor: String? = "Sandra Oh"
val lengthOfName = if (favoriteActor != null) {
favoriteActor.length
} else {
0
}
println("The number of characters in your favorite actor's name is $lengthOfName.")
}
Outputnya seperti yang diharapkan:
The number of characters in your favorite actor's name is 9.
Jumlah karakter pada nama yang Anda gunakan mungkin berbeda.
Menggunakan operator Elvis ?:
Operator Elvis ?: adalah operator yang dapat Anda gunakan bersama operator panggilan aman ?.. Dengan operator Elvis ?:, Anda dapat menambahkan nilai default saat operator panggilan aman ?. menampilkan null. Ini serupa dengan ekspresi if/else, tetapi dengan cara yang lebih idiomatis.
Jika variabel bukan null, ekspresi sebelum operator Elvis ?: dieksekusi. Jika variabel adalah null, ekspresi setelah operator Elvis ?: dieksekusi.

Untuk memodifikasi program sebelumnya untuk menggunakan operator Elvis ?:, ikuti langkah-langkah ini:
- Hapus kondisional
if/else, lalu tetapkan variabellengthOfNameke variabelfavoriteActornullable dan gunakan operator panggilan aman?.untuk memanggil propertilength-nya:
fun main() {
var favoriteActor: String? = "Sandra Oh"
val lengthOfName = favoriteActor?.length
println("The number of characters in your favorite actor's name is $lengthOfName.")
}
- Setelah properti
length, tambahkan operator Elvis?:, diikuti dengan nilai0, lalu jalankan program ini:
fun main() {
var favoriteActor: String? = "Sandra Oh"
val lengthOfName = favoriteActor?.length ?: 0
println("The number of characters in your favorite actor's name is $lengthOfName.")
}
Outputnya sama dengan output sebelumnya:
The number of characters in your favorite actor's name is 9.
4. Kesimpulan
Selamat! Anda telah mempelajari tentang nullability dan cara menggunakan berbagai operator untuk mengelolanya.
Ringkasan
- Variabel dapat ditetapkan ke
nulluntuk menunjukkan bahwa variabel tersebut tidak memiliki nilai. - Variabel non-nullable tidak dapat ditetapkan ke
null. - Variabel nullable dapat ditetapkan ke
null. - Untuk mengakses metode atau properti variabel nullable, Anda perlu menggunakan operator panggilan aman
?.atau operator pernyataan not-null!!. - Anda dapat menggunakan pernyataan
if/elsedengan pemeriksaannulluntuk mengakses variabel nullable dalam konteks non-nullable. - Anda dapat mengonversi variabel nullable menjadi jenis yang non-nullable dengan ekspresi
if/else. - Anda dapat memberikan nilai default saat variabel nullable adalah
nulldengan ekspresiif/elseatau operator Elvis?:.
