Masukkan Password
37 The Complete Kotlin Course #36- Nullability - Kotlin Tutorials for Beginners
Materi pada transcript tersebut sedang menjelaskan nullability di Kotlin, yaitu bagaimana Kotlin menangani kondisi ketika sebuah variabel mungkin memiliki nilai atau mungkin tidak memiliki nilai (null).
Saya jelaskan dari dasar dengan contoh yang sederhana.
1. Apa itu null?
Sederhananya:
nullberarti tidak ada nilai.
Misalnya kita punya:
var name = "Jack"
Variabel name memiliki nilai berupa "Jack".
Kalau:
var name = ""
Ini bukan null.
"" adalah String kosong. Artinya variabel tersebut tetap mempunyai nilai, hanya saja jumlah karakternya 0.
Sedangkan:
var name = null
Artinya name tidak memiliki nilai.
Perbedaannya
| Kode | Artinya |
|---|---|
"Jack" | Ada nilai, yaitu Jack |
"" | Ada nilai, tetapi String-nya kosong |
null | Tidak ada nilai |
Ini adalah konsep yang sangat penting.
2. Contoh kehidupan nyata
Bayangkan kita menyimpan data seseorang:
var name = "Jack"
var age = 29
var occupation = "Developer"
Data tersebut berarti:
name→ Jackage→ 29occupation→ Developer
Sekarang bayangkan Jack kehilangan pekerjaannya.
Kita tidak bisa mengatakan:
occupation = ""
karena "" berarti pekerjaannya adalah String kosong, bukan berarti “tidak punya pekerjaan”.
Kita juga bisa saja menggunakan kata:
"Unemployed"
Tetapi itu bukan benar-benar “tidak ada data”. Itu adalah sebuah nilai berupa teks "Unemployed".
Dalam kondisi tertentu, kita ingin mengatakan:
“Data pekerjaan orang ini memang tidak tersedia / tidak ada.”
Untuk kondisi seperti inilah null berguna.
3. Analogi null seperti sebuah kotak
Cara paling mudah memahami nullable adalah membayangkan sebuah kotak.
Non-null
Misalnya:
var age = 29
Bayangkan:
┌─────────────┐
│ 29 │
└─────────────┘
Kotaknya pasti berisi nilai.
age tidak boleh menjadi null.
Nullable
Sekarang:
var occupation: String? = null
Bayangkan:
┌─────────────┐
│ │
│ kosong │
│ │
└─────────────┘
Kotak tersebut boleh:
- berisi
String, atau - tidak berisi nilai (
null).
Misalnya nanti:
occupation = "Developer"
menjadi:
┌─────────────┐
│ Developer │
└─────────────┘
Jadi konsep nullable adalah:
“Variabel ini boleh memiliki nilai, tetapi boleh juga tidak memiliki nilai.”
4. Apa itu nullable type?
Nah, ini bagian paling penting dari materi.
Di Kotlin, secara default sebuah variabel tidak boleh null.
Contohnya:
var name: String = "Jack"
name adalah String biasa.
Kotlin menganggap:
name → pasti mempunyai String
Jadi kita tidak boleh:
name = null
Karena String tersebut adalah non-nullable.
5. Bagaimana membuat String menjadi nullable?
Gunakan tanda:
?
Setelah tipe data.
Contohnya:
var occupation: String? = null
Perhatikan:
String
berarti:
harus memiliki String.
Sedangkan:
String?
berarti:
boleh memiliki String atau
null.
Bisa digambarkan seperti ini:
String
↓
"Developer"
"Teacher"
"Student"
dll.
Sedangkan:
String?
↓
"Developer"
"Teacher"
"Student"
null
Tanda ? inilah yang disebut nullable type.
6. Mengapa Kotlin menggunakan ?
Kotlin sengaja membuat perbedaan antara:
String
dan:
String?
Tujuannya untuk keamanan program.
Misalnya:
var name: String = "Jack"
Kita tahu bahwa name pasti mempunyai nilai.
Jadi kita bisa melakukan:
println(name.length)
Kotlin tidak perlu khawatir bahwa name adalah null.
Tetapi kalau:
var name: String? = null
kemudian kita langsung melakukan:
println(name.length)
Kotlin akan memberikan error.
Kenapa?
Karena name bisa saja:
"Jack"
tetapi bisa juga:
null
Kalau ternyata name == null, bagaimana program bisa mengetahui:
name.length
?
null tidak mempunyai panjang String.
7. Contoh yang sangat sederhana
Misalnya:
var occupation: String? = null
Saat ini:
occupation
↓
null
Kemudian kita ubah:
occupation = "Developer"
Sekarang:
occupation
↓
"Developer"
Kemudian bisa kita ubah lagi:
occupation = "Teacher"
Sekarang:
occupation
↓
"Teacher"
Atau kembali:
occupation = null
Sekarang:
occupation
↓
null
Itulah fleksibilitas nullable.
8. Kenapa variabel biasa tidak boleh null?
Misalnya:
var age: Int = 29
Kotlin menjamin:
ageselalu mempunyai nilaiInt.
Jadi:
age = null
tidak diperbolehkan.
Kalau memang kita ingin age boleh tidak diketahui:
var age: Int? = null
Sekarang age boleh:
age = 29
atau:
age = null
9. Nullable bukan berarti memiliki nilai null
Ini bagian yang kadang membingungkan.
Misalnya:
var occupation: String? = null
Tipe datanya adalah:
String?
Tetapi nilai saat ini adalah:
null
Jadi kita harus membedakan:
String?
adalah tipe data.
null
adalah nilai yang menunjukkan tidak ada nilai.
Contoh:
var occupation: String? = "Developer"
Tipe:
String?
Nilai:
"Developer"
Kemudian:
occupation = null
Tipe tetap:
String?
Nilainya sekarang:
null
10. Lalu bagaimana cara menggunakan nullable?
Misalnya:
var occupation: String? = null
Kita ingin mencetak panjang occupation:
println(occupation.length)
Kotlin akan menolak kode tersebut karena occupation mungkin null.
Kita perlu memberitahu Kotlin:
“Saya tahu variabel ini nullable, jadi saya akan menangani kemungkinan
null.”
Salah satu caranya adalah menggunakan safe call operator:
println(occupation?.length)
Tanda:
?.
disebut safe call operator.
Artinya kira-kira:
“Kalau
occupationtidak null, ambillength. Kalau null, jangan error.”
Misalnya:
var occupation: String? = "Developer"
println(occupation?.length)
Hasil:
9
Karena "Developer" mempunyai 9 karakter.
Tetapi:
var occupation: String? = null
println(occupation?.length)
hasilnya:
null
Program tidak crash hanya karena occupation kosong.
11. Analogi String vs String?
Bayangkan ada dua kotak.
Kotak pertama: String
┌───────────────────┐
│ String │
│ │
│ "Hello" │
└───────────────────┘
Kotak ini wajib berisi String.
Tidak boleh:
null
Kotak kedua: String?
┌───────────────────┐
│ String? │
│ │
│ "Hello" atau null │
└───────────────────┘
Kotak ini boleh berisi:
"Hello"
atau:
null
12. Contoh lengkap
Misalnya kita membuat data seseorang:
var name: String = "Jack"
var age: Int = 29
var occupation: String? = null
Artinya:
name
↓
"Jack"
age
↓
29
occupation
↓
null
Kenapa name dan age tidak nullable?
Karena dalam contoh kita menganggap keduanya harus mempunyai nilai.
Sedangkan occupation bisa saja tidak ada.
Kemudian Jack mendapatkan pekerjaan:
occupation = "Developer"
Sekarang:
name → "Jack"
age → 29
occupation → "Developer"
Kalau kemudian Jack berhenti bekerja:
occupation = null
Sekarang:
name → "Jack"
age → 29
occupation → null
13. Inti dari materi tersebut
Kalau diringkas, sebenarnya transcript tadi ingin menyampaikan 4 konsep utama.
① null = tidak ada nilai
occupation = null
berarti tidak ada nilai occupation.
② "" bukan null
occupation = ""
berarti ada sebuah String, tetapi String tersebut kosong.
Sedangkan:
occupation = null
berarti tidak ada nilai.
③ Kotlin punya nullable type
Gunakan:
?
Contoh:
String?
Int?
Double?
Boolean?
Artinya tipe tersebut boleh mempunyai nilai null.
④ Non-nullable dan nullable berbeda
String
→ tidak boleh null.
String?
→ boleh null.
Contoh:
var name: String = "Jack"
// name = null ❌
Sedangkan:
var occupation: String? = null
// occupation = "Developer" ✅
// occupation = null ✅
14. Kenapa konsep ini penting di Kotlin?
Ini salah satu fitur penting Kotlin karena membantu mencegah error yang sangat umum dalam pemrograman, yaitu NullPointerException (NPE).
Bayangkan kita mempunyai:
var name: String? = null
Kalau kita sembarangan menganggap name selalu berisi String, program bisa bermasalah.
Kotlin memaksa kita untuk menyadari:
“Hei, variabel ini mungkin
null. Kamu harus menangani kemungkinan tersebut.”
Jadi Kotlin membuat programmer secara eksplisit menangani kondisi null.
Ini membuat kode lebih aman.
15. Gambaran besarnya
Cara paling mudah mengingat materi ini:
VARIABEL
│
┌─────────┴─────────┐
│ │
Non-nullable Nullable
│ │
String String?
Int Int?
Boolean Boolean?
│ │
wajib ada nilai boleh ada nilai
atau null
Contoh:
var name: String = "Jack"
Pasti ada nilai.
Sedangkan:
var occupation: String? = null
Bisa ada nilai, bisa null.
Dan ketika menggunakan nullable:
occupation?.length
artinya:
“Kalau
occupationada nilainya, ambil panjangnya. Kalauoccupationadalahnull, jangan lakukan operasi tersebut.”
Jadi satu kalimat yang paling penting:
Nullable type (
String?) adalah tipe data yang memungkinkan sebuah variabel menyimpan nilai normal ataunull, sedangkan non-nullable type (String) dijamin selalu memiliki nilai.
Materi berikutnya biasanya akan masuk ke cara menangani nullable, seperti ?., !!, if (x != null), dan ?: (Elvis operator). Itu bagian yang sangat penting untuk benar-benar menguasai nullability Kotlin.
I can also create an image explaining the String vs String? and null flow.