Masukkan Password
40 The Complete Kotlin Course #39 - Elvis Operator - Kotlin Tutorials for Beginners
Bagian ini membahas salah satu fitur nullability Kotlin yang sangat sering digunakan, yaitu Elvis Operator (?:).
Kalau materi sebelumnya membahas:
?→ membuat tipe menjadi nullable!!→ memaksa nullable dianggap tidak nullif (x != null)→ mengecek apakah nilai tidak null
Maka sekarang:
Elvis Operator (
?:) digunakan untuk mengambil nilai dari nullable, tetapi menyediakan nilai cadangan/default kalau ternyata nilainyanull.
1. Apa itu Elvis Operator?
Bentuknya:
?:
Contoh:
val result = nullableInt ?: 0
Cara membacanya:
“Kalau
nullableInttidak null, gunakan nilainya. Kalau null, gunakan0.”
Ini inti dari Elvis Operator.
2. Kenapa namanya Elvis?
Namanya memang agak unik 😄.
Operator:
?:
kalau dibayangkan dan diputar sekitar 90 derajat, bentuknya dianggap menyerupai gaya rambut Elvis Presley, sehingga disebut Elvis Operator.
Tapi kamu tidak perlu terlalu memikirkan asal namanya.
Yang penting hafalkan bentuknya:
?:
dan fungsinya:
Nilai utama kalau tersedia, nilai default kalau
null.
3. Contoh paling sederhana
Misalnya:
val nullableInt: Int? = 10
Kita menggunakan Elvis Operator:
val result = nullableInt ?: 0
Sekarang Kotlin mengecek:
nullableInt
│
▼
Apakah null?
│
┌─┴─┐
NO YES
│ │
▼ ▼
10 0
Karena:
nullableInt = 10
dan 10 bukan null, maka:
result = 10
Kalau kita:
println(result)
hasilnya:
10
4. Bagaimana kalau nilainya null?
Sekarang:
val nullableInt: Int? = null
Kemudian:
val result = nullableInt ?: 0
Kotlin mengecek:
nullableInt
│
▼
Apakah null?
│
▼
YES
│
▼
gunakan nilai
sebelah kanan
│
▼
0
Jadi:
result = 0
Kalau:
println(result)
hasilnya:
0
5. Jadi ?: seperti “kalau tidak ada, pakai ini”
Ini cara paling gampang mengingatnya.
val result = nullableInt ?: 0
Baca:
“Ambil
nullableInt. Kalau ada nilainya, gunakan itu. Kalau tidak ada (null), gunakan0.”
Contoh lain:
val name: String? = null
val displayName = name ?: "Guest"
Hasil:
displayName = "Guest"
Karena name adalah null.
Kalau:
val name: String? = "Jack"
val displayName = name ?: "Guest"
hasilnya:
displayName = "Jack"
Karena "Jack" tersedia.
6. Perhatikan bahwa Elvis Operator tidak mengubah nilai nullable
Ini penting.
Misalnya:
val name: String? = null
val displayName = name ?: "Guest"
Bukan berarti:
name berubah menjadi "Guest"
Tidak.
Nilai name tetap:
null
Yang mendapatkan "Guest" adalah:
displayName
Jadi:
name
↓
null
displayName
↓
"Guest"
Elvis Operator menghasilkan nilai baru berdasarkan kondisi.
7. Analogi kehidupan sehari-hari
Bayangkan kamu sedang menanyakan nama seseorang.
"Siapa namamu?"
Kalau orang tersebut memberikan:
Jack
kita gunakan:
Jack
Tetapi kalau dia tidak memberikan nama:
null
kita mengatakan:
Guest
Dalam Kotlin:
val displayName = name ?: "Guest"
Artinya:
Ada nama?
│
┌─┴─┐
YES NO
│ │
▼ ▼
name "Guest"
8. Dibandingkan dengan if
Sebenarnya Elvis Operator adalah cara yang lebih ringkas untuk logika yang bisa ditulis dengan if.
Misalnya:
val name: String? = null
val displayName = if (name != null) {
name
} else {
"Guest"
}
Ini bisa disederhanakan menjadi:
val displayName = name ?: "Guest"
Keduanya memiliki ide yang sama.
Versi panjang:
if (name != null) {
name
} else {
"Guest"
}
Versi singkat:
name ?: "Guest"
Karena itu Elvis Operator sangat praktis.
9. Contoh dengan angka
Misalnya kita memiliki:
val score: Int? = 80
Kita ingin memastikan kalau score tidak tersedia, nilainya dianggap 0.
Kita bisa menulis:
val finalScore = score ?: 0
Karena:
score = 80
maka:
finalScore = 80
Kalau:
val score: Int? = null
maka:
finalScore = 0
10. Contoh yang lebih nyata
Misalnya kita mempunyai data user:
val username: String? = null
Kita ingin menampilkan nama.
Daripada:
println(username)
yang mungkin menghasilkan:
null
kita bisa:
println(username ?: "Guest")
Kalau username adalah:
"Jack"
hasil:
Jack
Kalau:
null
hasil:
Guest
Ini sangat berguna ketika kita membutuhkan nilai default.
11. Elvis Operator dengan ?.
Nah, nanti kamu akan sering melihat kombinasi seperti ini:
val length = name?.length ?: 0
Ini sangat bagus untuk dipahami.
Misalnya:
val name: String? = "Jack"
Kita punya:
name?.length
Artinya:
Kalau
nametidak null, ambillength.
Kemudian:
?: 0
Artinya:
Kalau hasil sebelumnya
null, gunakan0.
Jadi:
val length = name?.length ?: 0
dibaca:
“Ambil panjang
name. Kalaunamenull, gunakan 0.”
12. Contoh ketika name = "Jack"
val name: String? = "Jack"
val length = name?.length ?: 0
Prosesnya:
name
↓
"Jack"
↓
name?.length
↓
4
↓
4 ?: 0
↓
4
Jadi:
length = 4
13. Contoh ketika name = null
val name: String? = null
val length = name?.length ?: 0
Proses:
name
↓
null
↓
name?.length
↓
null
↓
null ?: 0
↓
0
Hasil:
length = 0
Tidak terjadi NullPointerException.
14. Bandingkan dengan !!
Ini penting karena kita sudah belajar !!.
Misalnya:
val name: String? = null
Menggunakan !!
println(name!!.length)
💥 Akan menyebabkan NullPointerException.
Karena kita memaksa:
“Name pasti tidak null.”
Padahal ternyata null.
Menggunakan Elvis
println(name?.length ?: 0)
Hasil:
0
Lebih aman karena kita sudah menyediakan nilai alternatif.
15. !! vs ?:
Keduanya memiliki tujuan yang berbeda.
!!
name!!
Artinya:
“Saya yakin nilai ini tidak null.”
Kalau ternyata null:
💥 NullPointerException
?:
name ?: "Guest"
Artinya:
“Kalau ada nilai, gunakan nilai tersebut. Kalau null, gunakan Guest.”
Tidak perlu memaksa nilai menjadi non-null.
16. Cara kerja Elvis Operator
Secara konsep:
val result = A ?: B
berarti:
Apakah A null?
│
┌────┴────┐
NO YES
│ │
▼ ▼
A B
Jadi:
A ?: B
dapat kamu ingat sebagai:
“A, kalau tidak ada maka B.”
17. Contoh lain
Default nama
val name: String? = null
val result = name ?: "Anonymous"
Hasil:
Anonymous
Default umur
val age: Int? = null
val result = age ?: 0
Hasil:
0
Default kota
val city: String? = null
val result = city ?: "Unknown"
Hasil:
Unknown
18. Elvis Operator juga bisa digunakan untuk operasi
Misalnya:
val number: Int? = null
val result = (number ?: 0) + 10
Karena number null:
number ?: 0
↓
0
kemudian:
0 + 10
hasil:
10
Kalau:
val number: Int? = 5
maka:
5 + 10
hasil:
15
19. Satu hal penting: hasilnya bisa menjadi non-null
Perhatikan:
val number: Int? = null
val result = number ?: 0
number adalah:
Int?
Tetapi result menjadi:
Int
Kenapa?
Karena kita sudah memberikan alternatif:
0
Jadi apa pun yang terjadi, result pasti mempunyai angka.
number
│
├── 10 ──────┐
│ │
└── null │
│ │
▼ │
0 ──────┘
│
▼
result
│
▼
Int
Tidak ada kemungkinan result menjadi null.
20. Contoh program lengkap
Misalnya:
fun main() {
val name: String? = null
val displayName = name ?: "Guest"
println("Hello, $displayName")
}
Output:
Hello, Guest
Kalau kita mengubah:
val name: String? = "Jack"
output:
Hello, Jack
Jadi kita tidak perlu menulis if-else panjang.
21. Hubungkan semua materi nullability
Sekarang kamu sudah belajar tiga cara utama.
A. Nullable ?
val name: String? = null
Artinya:
nameboleh berisi String ataunull.
B. Null check + Smart Cast
if (name != null) {
println(name.length)
}
Artinya:
“Kalau name tidak null, gunakan nilainya.”
Kotlin melakukan smart cast di dalam blok tersebut.
C. Elvis Operator ?:
val displayName = name ?: "Guest"
Artinya:
“Kalau name ada, gunakan name. Kalau null, gunakan Guest.”
22. Cara memilih mana yang digunakan?
Gunakan null check kalau kamu ingin melakukan beberapa operasi berdasarkan kondisi.
if (name != null) {
println("Nama: $name")
println("Panjang: ${name.length}")
} else {
println("Nama tidak tersedia")
}
Gunakan Elvis Operator kalau kebutuhanmu sederhana:
“Kalau null, gunakan nilai default.”
val displayName = name ?: "Guest"
Dan gunakan !! hanya ketika kamu benar-benar yakin nilainya tidak mungkin null.
name!!
23. Ringkasan super sederhana
Hafalkan tabel ini:
| Syntax | Arti |
|---|---|
String | Tidak boleh null |
String? | Boleh null |
x != null | Mengecek apakah x tidak null |
x!! | Memaksa x dianggap tidak null ⚠️ |
x ?: value | Kalau x null, gunakan value |
x?.something | Jalankan hanya kalau x tidak null |
Contoh:
val name: String? = null
Cek:
if (name != null) {
println(name)
}
Paksa:
println(name!!)
⚠️ Bisa crash.
Beri default:
println(name ?: "Guest")
✅ Aman.
24. Kalimat yang paling mudah untuk mengingat Elvis Operator
Kalau kamu melihat:
A ?: B
langsung baca:
“Pakai A. Kalau A null, pakai B.”
Contoh:
val name = username ?: "Guest"
Baca:
“Pakai
username; kalauusernamenull, pakaiGuest.”
Contoh lain:
val age = userAge ?: 0
Baca:
“Pakai
userAge; kalau null, pakai0.”
Dan kombinasi yang sangat sering muncul:
val length = name?.length ?: 0
Baca:
“Kalau
nameada, ambil panjangnya; kalau tidak ada, hasilnya 0.”
Jadi kalau !! adalah “percaya saya, pasti tidak null”, maka ?: adalah “kalau null, saya sudah punya rencana cadangan.”