Masukkan Password
30 The Complete Kotlin Course #29- Return Value of Expression - Kotlin Tutorials for Beginners
Materi ini melanjutkan pembahasan when, tetapi sekarang fokusnya pada hal yang sangat penting dalam Kotlin:
whenbukan hanya untuk menjalankan kode, tetapi juga bisa menghasilkan/mengembalikan sebuah value.
Ini berkaitan langsung dengan materi sebelumnya tentang expression.
1. Review: apa itu expression?
Sebelumnya kita sudah belajar bahwa Kotlin memiliki konsep expression.
Expression adalah sesuatu yang menghasilkan sebuah nilai.
Contoh:
val result = 10 + 5
Bagian:
10 + 5
menghasilkan:
15
Jadi:
10 + 5
↓
15
↓
result
Begitu juga dengan perbandingan:
val isAdult = age >= 18
Misalnya age = 20:
20 >= 18
↓
true
↓
isAdult
Jadi expression bisa menghasilkan value seperti:
IntStringBoolean- dan berbagai tipe lainnya.
2. if juga merupakan expression
Ini sudah pernah kita pelajari.
Contoh:
val age = 20
val status = if (age >= 18) {
"Adult"
} else {
"Minor"
}
Karena:
20 >= 18
↓
true
maka if menghasilkan:
"Adult"
Sehingga:
status = "Adult"
Jadi if tidak hanya:
if (condition) {
println(...)
}
tetapi bisa:
val result = if (condition) value1 else value2
3. Nah, when juga merupakan expression
Konsep yang sama berlaku untuk when.
Misalnya:
val number = 3
val numberName = when (number) {
1 -> "One"
2 -> "Two"
3 -> "Three"
else -> "Unknown number"
}
Di sini:
when (number)
menghasilkan sebuah String.
Karena:
number = 3
maka branch yang cocok adalah:
3 -> "Three"
Sehingga:
numberName = "Three"
Kemudian kita bisa:
println(numberName)
Output:
Three
4. Ini sebenarnya sangat mirip dengan if expression
Bandingkan.
if
val age = 20
val status = if (age >= 18) {
"Adult"
} else {
"Minor"
}
Hasil:
status = "Adult"
when
val number = 3
val numberName = when (number) {
1 -> "One"
2 -> "Two"
3 -> "Three"
else -> "Unknown"
}
Hasil:
numberName = "Three"
Jadi pola pikirnya sama:
IF / WHEN
↓
memilih salah satu hasil
↓
hasil tersebut disimpan
5. Mari bedah kode dari video
Kemungkinan bentuk kode yang dimaksud video adalah seperti ini:
fun main() {
val number = 9
val numberName = when (number) {
2 -> "Two"
3 -> "Three"
5 -> "Five"
9 -> "Nine"
else -> "Unknown number"
}
println(numberName)
}
Mari kita pahami satu per satu.
6. val number = 9
val number = 9
Kita membuat variable:
number
↓
9
Karena menggunakan val, kita tidak bermaksud mengubah nilainya.
Type inference akan mengetahui:
number : Int
7. val numberName = when (number)
Bagian ini yang paling penting:
val numberName = when (number) {
Kita membuat variable baru:
numberName
dan value-nya berasal dari:
when (number)
Jadi kita bisa membacanya:
“Buat
numberName, dan isi dengan hasil dariwhenberdasarkannumber.”
8. Bagaimana when menentukan hasil?
Perhatikan:
when (number) {
2 -> "Two"
3 -> "Three"
5 -> "Five"
9 -> "Nine"
else -> "Unknown number"
}
Kotlin melihat:
number = 9
Kemudian memeriksa kemungkinan:
Apakah 9 == 2? ❌
Apakah 9 == 3? ❌
Apakah 9 == 5? ❌
Apakah 9 == 9? ✅
Ketika menemukan:
9 -> "Nine"
maka hasil when adalah:
"Nine"
Kemudian hasil tersebut masuk ke:
numberName
Jadi:
numberName = "Nine"
9. Perhatikan: yang dikembalikan adalah String
Ini poin penting.
Dalam:
when (number) {
2 -> "Two"
3 -> "Three"
5 -> "Five"
9 -> "Nine"
else -> "Unknown number"
}
bagian kanan:
"Two"
"Three"
"Five"
"Nine"
"Unknown number"
adalah value yang dihasilkan oleh when.
Karena semuanya String, maka Kotlin dapat menyimpulkan:
numberName : String
Secara konsep:
when
↓
"Nine"
↓
numberName
10. println(numberName)
Setelah itu:
println(numberName)
Karena:
numberName = "Nine"
maka hasilnya:
Nine
Jadi when tidak langsung mencetak sesuatu.
Justru when menghasilkan value, kemudian value itu kita simpan dan cetak.
11. Bedakan when sebagai statement dan expression
Ini sangat penting.
Cara pertama: hanya menjalankan aksi
when (number) {
1 -> println("One")
2 -> println("Two")
else -> println("Other")
}
Di sini kita tidak menyimpan hasil when.
Kita hanya menggunakan when untuk menentukan kode mana yang dijalankan.
Secara sederhana:
“Kalau nilainya 1, print One. Kalau 2, print Two.”
Cara kedua: mengambil hasil when
val numberName = when (number) {
1 -> "One"
2 -> "Two"
else -> "Other"
}
Sekarang when menghasilkan value.
Secara sederhana:
“Tentukan String yang sesuai, lalu simpan hasilnya ke
numberName.”
12. Analogi sederhana
Bayangkan kamu bertanya kepada seseorang:
“Angka ini namanya apa?”
Kamu memberikan:
9
Orang tersebut melihat tabel:
1 → One
2 → Two
3 → Three
...
9 → Nine
Dia menjawab:
"Nine"
Jawaban tersebut kemudian kamu simpan:
numberName = "Nine"
Dalam Kotlin:
val numberName = when (number) {
9 -> "Nine"
}
Jadi:
whenseperti mesin yang menerima input dan menghasilkan output.
13. Visualisasi input → proses → output
Ini mental model yang bagus:
number = 9
↓
when
↓
cari branch yang cocok
↓
9 -> "Nine"
↓
"Nine"
↓
numberName
Atau:
INPUT
↓
when
↓
MATCHING
↓
VALUE
↓
VARIABLE
14. Apa yang terjadi kalau number = 3?
Misalnya:
val number = 3
val numberName = when (number) {
2 -> "Two"
3 -> "Three"
5 -> "Five"
9 -> "Nine"
else -> "Unknown number"
}
Kotlin menemukan:
3 -> "Three"
Jadi:
numberName = "Three"
Output:
Three
15. Kalau number = 100?
Tidak ada:
100 -> ...
Maka digunakan:
else -> "Unknown number"
Sehingga:
numberName = "Unknown number"
Output:
Unknown number
16. Kenapa else penting?
Karena kita sedang menggunakan when untuk menghasilkan value.
Misalnya:
val numberName = when (number) {
2 -> "Two"
3 -> "Three"
5 -> "Five"
9 -> "Nine"
}
Kalau number = 100, tidak ada branch yang cocok.
Karena when harus menghasilkan sebuah hasil untuk mengisi:
val numberName = ...
maka compiler biasanya membutuhkan branch yang mencakup kemungkinan lainnya.
Kita gunakan:
else
val numberName = when (number) {
2 -> "Two"
3 -> "Three"
5 -> "Five"
9 -> "Nine"
else -> "Unknown number"
}
Dengan begitu semua kemungkinan memiliki hasil.
17. Setiap branch menghasilkan value
Perhatikan:
when (number) {
2 -> "Two"
3 -> "Three"
5 -> "Five"
9 -> "Nine"
else -> "Unknown number"
}
Masing-masing branch punya hasil:
2 → "Two"
3 → "Three"
5 → "Five"
9 → "Nine"
lainnya → "Unknown number"
Jadi when memilih satu hasil.
Misalnya:
number = 5
maka:
5 → "Five"
dan hasil when:
"Five"
18. Hanya branch pertama yang cocok
Sama seperti materi sebelumnya.
Misalnya:
val number = 3
val result = when (number) {
3 -> "First match"
3 -> "Second match"
else -> "Other"
}
Secara konsep, branch pertama yang cocok yang digunakan.
Jadi:
3 → "First match"
Branch kedua tidak diperlukan untuk dieksekusi.
Dalam praktik, tentu kita tidak membuat duplicate case seperti ini karena compiler dapat memperingatkan/menolak konstruksi yang tidak masuk akal.
19. Hasil when tidak harus String
Ini juga sangat penting.
Video menggunakan String:
val numberName = when (number) {
1 -> "One"
2 -> "Two"
else -> "Other"
}
Tetapi when bisa menghasilkan tipe lain.
Menghasilkan Int
val result = when (number) {
1 -> 100
2 -> 200
else -> 0
}
Hasil:
result : Int
Menghasilkan Boolean
val isValid = when (number) {
1 -> true
2 -> true
else -> false
}
Hasil:
isValid : Boolean
Menghasilkan Double
val price = when (number) {
1 -> 10.5
2 -> 20.5
else -> 0.0
}
Hasilnya Double.
20. Bahkan bisa menghasilkan object
Nanti ketika kamu sudah belajar class dan object, when bisa menghasilkan object tertentu.
Misalnya secara konsep:
val userType = when (role) {
"admin" -> Admin()
"user" -> User()
else -> Guest()
}
Jadi when bukan sekadar:
“print sesuatu.”
Tetapi bisa menjadi:
“Tentukan value apa yang harus digunakan berdasarkan kondisi.”
21. when bisa langsung digunakan tanpa variable
Kita tidak selalu harus menulis:
val numberName = when (number) {
1 -> "One"
2 -> "Two"
else -> "Other"
}
Kita juga bisa langsung:
println(
when (number) {
1 -> "One"
2 -> "Two"
else -> "Other"
}
)
Tetapi untuk pemula, saya lebih menyarankan versi pertama karena lebih mudah dibaca.
22. Bandingkan dengan if
Ini penting karena kamu sudah belajar if expression.
if
val age = 20
val status = if (age >= 18) {
"Adult"
} else {
"Minor"
}
Proses:
age >= 18
↓
true
↓
"Adult"
↓
status
when
val number = 3
val name = when (number) {
1 -> "One"
2 -> "Two"
3 -> "Three"
else -> "Other"
}
Proses:
number = 3
↓
when
↓
3 cocok
↓
"Three"
↓
name
Jadi keduanya sama-sama bisa menghasilkan value.
23. Kapan menggunakan if, kapan when?
Untuk pemula, gunakan aturan sederhana ini.
Gunakan if
Kalau kamu hanya punya kondisi seperti:
apakah umur >= 18?
Contoh:
val status = if (age >= 18) "Adult" else "Minor"
Gunakan when
Kalau kamu punya beberapa kemungkinan:
1 → One
2 → Two
3 → Three
4 → Four
...
Contoh:
val name = when (number) {
1 -> "One"
2 -> "Two"
3 -> "Three"
else -> "Other"
}
24. Contoh yang lebih realistis
Misalnya aplikasi memiliki status pesanan:
val status = "SHIPPED"
val message = when (status) {
"PENDING" -> "Pesanan sedang menunggu"
"PAID" -> "Pesanan sudah dibayar"
"SHIPPED" -> "Pesanan sedang dikirim"
"DELIVERED" -> "Pesanan sudah sampai"
else -> "Status tidak dikenal"
}
println(message)
Hasil:
Pesanan sedang dikirim
Perhatikan pola:
status
↓
when
↓
cari status
↓
ambil message
↓
message
Ini adalah pola yang sangat umum dalam pemrograman.
25. Contoh lain: menentukan kategori umur
Kamu juga bisa menggunakan when dalam bentuk kondisi:
val age = 20
val category = when {
age < 13 -> "Child"
age < 18 -> "Teenager"
else -> "Adult"
}
Hasil:
category = "Adult"
Ini sedikit berbeda dari bentuk yang sedang dipelajari video.
Video fokus pada:
when (number) {
1 -> ...
2 -> ...
}
Sedangkan contoh di atas:
when {
condition1 -> ...
condition2 -> ...
else -> ...
}
Nanti kamu akan semakin sering menemui bentuk ini.
26. Hubungkan dengan konsep expression
Sekarang kamu harus mulai melihat pola besar Kotlin.
Kita sudah belajar:
Arithmetic expression
val result = 10 + 5
Hasil:
15
Comparison expression
val result = 10 > 5
Hasil:
true
if expression
val result = if (10 > 5) "Yes" else "No"
Hasil:
"Yes"
when expression
val result = when (number) {
1 -> "One"
2 -> "Two"
else -> "Other"
}
Hasilnya salah satu String.
Jadi:
Expression
↓
menghasilkan value
27. Ini alasan val sangat cocok
Perhatikan:
val numberName = when (number) {
1 -> "One"
2 -> "Two"
else -> "Other"
}
Kenapa menggunakan val?
Karena kita tidak perlu mengubah numberName.
Sekali when selesai:
numberName = "Three"
dan selesai.
Tidak ada kebutuhan:
numberName = "Four"
Kemudian:
numberName = "Five"
Jadi val sangat cocok untuk hasil yang sudah ditentukan.
28. Dibandingkan cara yang lebih panjang
Tanpa memanfaatkan when sebagai expression, kita bisa menulis:
val number = 3
var numberName: String
if (number == 1) {
numberName = "One"
} else if (number == 2) {
numberName = "Two"
} else if (number == 3) {
numberName = "Three"
} else {
numberName = "Other"
}
Ini bisa bekerja.
Tetapi lebih panjang.
Dengan when:
val number = 3
val numberName = when (number) {
1 -> "One"
2 -> "Two"
3 -> "Three"
else -> "Other"
}
Lebih ringkas dan lebih jelas.
Dan yang paling menarik:
Kita bisa menggunakan
valkarenawhenlangsung menghasilkan value.
29. Kesalahan pemahaman yang perlu dihindari
❌ when hanya digunakan untuk println
Tidak.
Contoh:
val result = when (number) {
1 -> "One"
2 -> "Two"
else -> "Other"
}
Ini justru salah satu kegunaan penting when.
❌ Semua branch harus memiliki value yang sama secara literal
Tidak harus value-nya sama, tetapi hasil akhirnya harus dapat memiliki tipe yang kompatibel.
Contoh sederhana:
val result = when (number) {
1 -> "One"
2 -> "Two"
else -> "Other"
}
semuanya String.
Ini yang paling mudah dipahami.
❌ when harus selalu disimpan dalam variable
Tidak.
Bisa langsung:
when (number) {
1 -> println("One")
2 -> println("Two")
}
Tetapi kalau kita membutuhkan hasilnya, kita bisa:
val result = when (number) {
1 -> "One"
2 -> "Two"
}
30. Koreksi beberapa bagian subtitle
Ada beberapa bagian transcript yang agak kacau.
“one expression”
Yang dimaksud jelas adalah:
whenexpression
Bukan “one expression”.
“returning value”
Ini benar secara konsep, tetapi lebih tepat untuk pemula mengatakan:
whensebagai expression menghasilkan sebuah value.
Dalam konteks branch:
3 -> "Three"
"Three" menjadi hasil dari branch tersebut, dan hasil branch yang terpilih menjadi hasil when.
“assigning a value with when expression”
Ini juga benar.
Contoh:
val numberName = when (number) {
1 -> "One"
2 -> "Two"
else -> "Unknown"
}
Hasil when di-assign ke numberName.
31. Mental model yang paling penting
Mulai sekarang ketika melihat:
val result = when (value) {
...
}
jangan hanya melihatnya sebagai:
“Ini
when.”
Tapi bacalah:
“Saya sedang meminta
whenuntuk menentukan sebuah value, lalu value tersebut saya simpan diresult.”
Contoh:
val number = 9
val numberName = when (number) {
2 -> "Two"
3 -> "Three"
5 -> "Five"
9 -> "Nine"
else -> "Unknown"
}
Mental model:
number = 9
↓
WHEN
↓
cari case yang cocok
↓
9 cocok
↓
"Nine"
↓
numberName
32. Ringkasan materi hari ini
Ada 4 hal utama yang perlu kamu kuasai.
1. when adalah expression
Artinya:
whendapat menghasilkan sebuah value.
2. Hasil when bisa disimpan
val result = when (number) {
1 -> "One"
2 -> "Two"
else -> "Other"
}
3. Branch yang cocok menentukan hasil
Kalau:
number = 2
maka:
2 -> "Two"
dan:
result = "Two"
4. else menangani kemungkinan lainnya
else -> "Other"
Artinya:
Jika tidak ada branch sebelumnya yang cocok, gunakan value ini.
Cheat sheet
val result = when (value) {
case1 -> result1
case2 -> result2
case3 -> result3
else -> defaultResult
}
Bacanya:
“Periksa
value. Kalau cocok dengancase1, hasilnyaresult1. Kalau cocok dengancase2, hasilnyaresult2. Kalau tidak ada yang cocok, hasilnyadefaultResult.”
Dan hubungkan dengan pelajaran sebelumnya:
if expression
↓
menghasilkan value
when expression
↓
menghasilkan value
Jadi perkembangan pemahamanmu sekarang adalah:
Boolean
↓
if / else
↓
if expression
↓
when
↓
when expression
↓
hasil when bisa disimpan ke val
Inilah salah satu kekuatan Kotlin: banyak konstruksi control flow dapat digunakan sebagai expression, sehingga kode seperti val result = when (...) { ... } bisa menjadi sangat ringkas dan mudah dibaca.