Untuk kasus yang melibatkan banyak kondisi berurutan, Kotlin menyediakan rantai else if yang dievaluasi dari atas ke bawah. Cabang pertama yang bernilai true akan dieksekusi, sementara cabang-cabang setelahnya dilewati. Sama seperti if biasa, rantai else if juga dapat berfungsi sebagai expression yang mengembalikan nilai. Hal ini menggantikan operator ternary ?: yang tidak ada di Kotlin. Pada chapter ini kita akan membandingkan bentuk statement dan expression pada rantai else if, serta melihat penerapannya pada kasus klasifikasi nilai dan perhitungan diskon.
Rantai else if sebagai Expression #
Rantai else if cocok untuk klasifikasi nilai numerik menjadi kategori diskrit. Kompilator mengevaluasi kondisi satu per satu mulai dari yang paling atas; ketika sebuah kondisi terpenuhi, nilai cabang tersebut dikembalikan dan cabang berikutnya tidak diperiksa lagi.
fun main() {
val nilai = 78
// Rantai else-if untuk klasifikasi nilai ujian
val predikat = if (nilai >= 90) {
"A"
} else if (nilai >= 80) {
"B"
} else if (nilai >= 70) {
"C"
} else if (nilai >= 60) {
"D"
} else {
"E"
}
println("Nilai $nilai mendapat predikat $predikat")
// Bentuk statement (tidak menghasilkan nilai)
val jam = 14
if (jam < 12) {
println("Selamat pagi")
} else if (jam < 15) {
println("Selamat siang")
} else if (jam < 18) {
println("Selamat sore")
} else {
println("Selamat malam")
}
// Memilih diskon berdasarkan jumlah pembelian
val totalBelanja = 250_000
val diskon = if (totalBelanja >= 500_000) {
0.20
} else if (totalBelanja >= 200_000) {
0.10
} else if (totalBelanja >= 100_000) {
0.05
} else {
0.0
}
val potongan = totalBelanja * diskon
println("Diskon: ${(diskon * 100).toInt()}%, potongan Rp${potongan.toInt()}")
}Output yang Dihasilkan:
Nilai 78 mendapat predikat C
Selamat siang
Diskon: 10%, potongan Rp25000Mari kita bedah cara kerja contoh di atas:
val predikat = if (nilai >= 90) "A" else if (...) ... else "E": kompilator memeriksanilai >= 90(false untuk 78), lalunilai >= 80(false), lalunilai >= 70(true), dan mengembalikan"C". Cabang>= 60danelsetidak dievaluasi.- Blok statement
if (jam < 12) ... else ...: tidak ada variabel yang menerima hasil karena blok hanya memicu efek samping berupaprintln. Setiap cabang berhenti pada cabang yang cocok. val diskon = if (totalBelanja >= 500_000) 0.20 else if ...: karena250_000 >= 200_000adalah true,diskonmenjadi0.10. Tipe disimpulkan sebagaiDoublekarena semua cabang mengembalikanDouble.val potongan = totalBelanja * diskon: perkalianInt * DoublemenghasilkanDouble. Konversi.toInt()dipakai untuk mencetak tanpa pecahan.
Tidak Ada Operator Ternary ?: #
Berbeda dengan Java, C, atau JavaScript, Kotlin tidak menyediakan operator ternary kondisi ? a : b. Operator if (kondisi) a else b menggantikan ternary sepenuhnya, sehingga pemrogram tidak perlu menghafal sintaks tambahan. Bentuk ini juga lebih mudah dibaca karena penanda cabangnya eksplisit.
Bentuk Statement vs Expression #
| Aspek | Bentuk Statement | Bentuk Expression |
|---|---|---|
| Mengembalikan nilai? | Tidak | Ya |
| Sintaks | if (...) { ... } else if (...) { ... } | val x = if (...) ... else if (...) ... else ... |
| Cocok untuk | aksi samping seperti println | pemilihan nilai |
Cabang else wajib? | Tidak | Ya untuk tipe non-Unit |
Urutan Kondisi Penting #
Karena evaluasi berhenti pada cabang pertama yang true, urutan kondisi menentukan hasil akhir. Bila Anda menulis if (nilai >= 60) sebelum if (nilai >= 90), semua nilai di atas 60 akan masuk kategori pertama dan tidak pernah mencapai cabang yang lebih tinggi.
Referensi Lanjutan #
- Control flow
— bagian rantai
else ifpada panduan control flow resmi
Dengan pola else if, kita dapat menulis klasifikasi multi-kondisi yang ringkas dan tetap aman secara tipe. Pada chapter berikutnya kita akan bertemu when, konstruksi yang lebih cocok ketika jumlah cabang banyak atau ketika pencocokan dilakukan terhadap nilai spesifik.