Menulis kondisional di Kotlin

1. Sebelum memulai

Salah satu dasar pemrograman yang paling penting adalah kondisional. Kondisional ini merupakan perintah dalam bahasa pemrograman yang menangani keputusan. Dengan kondisional, sifat kode akan menjadi dinamis, yang berarti bahwa kode dapat berperilaku berbeda dalam kondisi yang berbeda.

Codelab ini mengajarkan cara menggunakan pernyataan dan ekspresi if/else dan when untuk menulis kondisional di Kotlin.

Prasyarat

  • Pengetahuan tentang dasar-dasar pemrograman Kotlin, termasuk variabel, serta fungsi println() dan main()

Yang akan Anda pelajari

  • Cara menulis ekspresi boolean.
  • Cara menulis pernyataan if/else.
  • Cara menulis pernyataan when.
  • Cara menulis ekspresi if/else.
  • Cara menulis ekspresi when.
  • Cara menggunakan koma untuk menentukan perilaku umum bagi beberapa cabang di kondisional when.
  • Cara menggunakan rentang in untuk menentukan perilaku umum bagi berbagai cabang dalam kondisional when.
  • Cara menggunakan kata kunci is untuk menulis pernyataan bersyarat when.

Yang akan Anda butuhkan

  • Browser web dengan akses ke Kotlin Playground

2. Menggunakan pernyataan if/else untuk menyatakan kondisi

Dalam kehidupan sehari-hari, melakukan berbagai hal dengan cara yang berbeda berdasarkan situasi yang Anda hadapi bukan lagi hal yang aneh. Misalnya, jika cuaca dingin, Anda mengenakan jaket, sedangkan jika cuaca hangat, Anda tidak mengenakan jaket.

Diagram alir yang menggambarkan keputusan yang dibuat saat cuaca dingin. Panah ya mengarah ke pesan "Pakai jaket" dan panah tidak mengarah ke pesan "Jangan pakai jaket".

Pengambilan keputusan juga merupakan konsep dasar dalam pemrograman. Anda menulis petunjuk yang memaparkan perilaku ideal suatu program dalam situasi tertentu sehingga program dapat bertindak atau bereaksi dengan semestinya ketika situasi terjadi. Di Kotlin, saat Anda ingin program menjalankan tindakan yang berbeda berdasarkan sebuah kondisi, Anda dapat menggunakan pernyataan if/else. Di bagian berikutnya, Anda akan menulis pernyataan if.

Menulis kondisi if dengan ekspresi boolean

Bayangkan Anda membuat suatu program yang berisi informasi mengenai tindakan yang harus dilakukan pengemudi saat berada di lampu lalu lintas. Fokus pada kondisi pertama: lampu lalu lintas menyala merah. Apa yang Anda lakukan saat lampu lalu lintas menyala merah? Berhenti.

Diagram alir yang menjelaskan keputusan yang dibuat saat lampu lalu lintas menyala merah. Tanda panah ya mengarah ke pesan "Berhenti!".

Di Kotlin, Anda dapat mengekspresikan kondisi ini dengan pernyataan if. Lihat anatomi pernyataan if:

Diagram yang menjelaskan pernyataan if dengan kata kunci if diikuti oleh pasangan tanda kurung dengan suatu kondisi di dalamnya. Setelah itu, ada sepasang kurung kurawal dengan isi di dalamnya. Pemblokiran kondisi ditandai.

Untuk menggunakan pernyataan if, Anda harus menggunakan kata kunci if diikuti dengan kondisi yang ingin dievaluasi. Anda harus menyatakan kondisinya dengan ekspresi boolean. Ekspresi menggabungkan nilai, variabel, dan operator yang menampilkan nilai. Ekspresi Boolean menampilkan nilai boolean.

Sebelumnya, Anda telah mempelajari operator penetapan, seperti:

val number = 1

Operator penetapan = menetapkan nilai 1 ke variabel number.

Sebaliknya, ekspresi boolean dibuat dengan operator perbandingan yang membandingkan nilai atau variabel pada kedua sisi persamaan. Lihat operator perbandingan.

1 == 1

Operator perbandingan == membandingkan nilai satu dengan nilai lain. Menurut Anda, nilai boolean mana yang akan ditampilkan oleh ekspresi ini?

Temukan nilai boolean ekspresi ini:

  1. Gunakan Kotlin Playground untuk menjalankan kode Anda.
  2. Dalam isi fungsi, tambahkan fungsi println(), lalu teruskan ekspresi 1 == 1 sebagai argumen:
fun main() {
    println(1 == 1)
}
  1. Jalankan program, lalu lihat output-nya:
true

Nilai 1 pertama sama dengan nilai 1 kedua sehingga ekspresi boolean menampilkan nilai true yang merupakan nilai boolean.

Coba

Selain operator perbandingan ==, ada operator perbandingan tambahan yang dapat Anda gunakan untuk membuat ekspresi boolean:

  • Kurang dari: <
  • Lebih dari: >
  • Kurang dari atau sama dengan: <=
  • Lebih dari atau sama dengan: >=
  • Tidak sama dengan: !=

Praktikkan penggunaan operator perbandingan dengan ekspresi sederhana:

  1. Dalam argumen, ganti operator perbandingan == dengan operator perbandingan <:
fun main() {
    println(1 < 1)
}
  1. Jalankan program, lalu lihat output-nya:

Output menampilkan nilai false karena nilai 1 pertama tidak kurang dari nilai 1 kedua.

false
  1. Ulangi dua langkah pertama dengan operator dan angka perbandingan lainnya.

Tulis pernyataan if sederhana

Setelah melihat beberapa contoh cara menulis ekspresi boolean, Anda dapat menulis pernyataan if pertama. Sintaksis untuk pernyataan if adalah sebagai berikut:

Diagram yang menjelaskan pernyataan if dengan kata kunci if diikuti oleh pasangan tanda kurung dengan suatu kondisi di dalamnya. Setelah itu, ada sepasang kurung kurawal dengan isi di dalamnya. Blok isi ditandai.

Pernyataan if dimulai dengan kata kunci if diikuti dengan suatu kondisi yang merupakan ekspresi boolean di dalam tanda kurung dan kumpulan tanda kurung kurawal. Isi adalah serangkaian pernyataan atau ekspresi yang Anda masukkan ke dalam sepasang tanda kurung kurawal setelah kondisi. Pernyataan atau ekspresi ini hanya dieksekusi jika kondisi terpenuhi. Dengan kata lain, pernyataan dalam tanda kurung kurawal hanya dieksekusi jika ekspresi boolean di cabang if menampilkan nilai true.

Tulis pernyataan if untuk kondisi saat lampu lalu lintas menyala merah:

  1. Di dalam fungsi main(), buat variabel trafficLightColor dan tetapkan nilai "Red":
fun main() {
    val trafficLightColor = "Red"
}
  1. Tambahkan pernyataan if untuk kondisi saat lampu lalu lintas menyala merah, lalu teruskan ekspresi trafficLightColor == "Red":
fun main() {
    val trafficLightColor = "Red"

    if (trafficLightColor == "Red") {

    }
}
  1. Di bagian isi pernyataan if, tambahkan fungsi println(), lalu teruskan argumen "Stop":
fun main() {
    val trafficLightColor = "Red"

    if (trafficLightColor == "Red") {
        println("Stop")
    }
}
  1. Jalankan program, lalu lihat output-nya:
Stop

Ekspresi trafficLightColor == "Red" menampilkan nilai true. Jadi, pernyataan println("Stop") akan dieksekusi sehingga akan mencetak pesan Stop.

Diagram yang menyoroti pernyataan if trafficLightColor == "Red" sebagai ekspresi dan kondisi Boolean. Pada baris berikutnya, isi println("Stop") dicatat hanya untuk dijalankan jika ekspresi Boolean memiliki nilai benar.

Menambahkan cabang else

Sekarang Anda dapat memperluas program sehingga pengemudi dapat diberi tahu untuk mulai melaju ketika lampu lalu lintas tidak lagi berwarna merah.

Diagram alir yang menjelaskan keputusan yang dibuat saat lampu lalu lintas menyala merah. Tanda panah ya mengarah ke pesan "Berhenti!". Tanda panah tidak mengarah ke pesan "Mulai Melaju".

Anda perlu menambahkan cabang else untuk membuat pernyataan if/else. Cabang adalah bagian kode tidak lengkap yang dapat Anda ikuti untuk membuat pernyataan atau ekspresi formulir. Cabang else harus mengikuti cabang if.

Diagram yang menjelaskan pernyataan if/else dengan kata kunci if yang diikuti dengan tanda kurung dengan suatu kondisi di dalamnya. Setelah itu, ada sepasang tanda kurung kurawal dengan isi 1 di dalamnya diikuti dengan kata kunci else yang diikuti dengan tanda kurung. Setelah itu, ada sepasang tanda kurung kurawal dengan blok isi 2 di dalamnya.

Setelah kurung kurawal tutup dari pernyataan if, tambahkan kata kunci else diikuti dengan sepasang tanda kurung kurawal. Di dalam tanda kurung kurawal pernyataan else, Anda dapat menambahkan isi kedua yang hanya dieksekusi saat kondisi di cabang if bernilai salah.

Menambahkan cabang else ke program Anda:

  1. Setelah kurung kurawal tutup dari pernyataan if, tambahkan kata kunci else diikuti dengan pasangan kurung kurawal lainnya:
fun main() {
    val trafficLightColor = "Red"

    if (trafficLightColor == "Red") {
        println("Stop")
    } else {

    }
}
  1. Di dalam tanda kurung kurawal kata kunci else, tambahkan fungsi println(), lalu teruskan argumen "Go":
fun main() {
    val trafficLightColor = "Red"

    if (trafficLightColor == "Red") {
        println("Stop")
    } else {
        println("Go")
    }
}
  1. Jalankan program ini, lalu lihat output-nya:
Stop

Perilaku program ini masih tetap sama seperti sebelum Anda menambahkan cabang else, tetapi tidak mencetak pesan Go.

  1. Tetapkan ulang variabel trafficLightColor ke nilai Green karena Anda ingin pengemudi mulai melaju saat lampu lalu lintas berwarna hijau:
fun main() {
    val trafficLightColor = "Green"

    if (trafficLightColor == "Red") {
        println("Stop")
    } else {
        println("Go")
    }
}
  1. Jalankan program ini, lalu lihat output-nya:
Go

Seperti yang dapat Anda lihat, program sekarang mencetak pesan Go, bukan pesan Stop.

Diagram yang menandai pernyataan if/else dengan kondisi trafficLightColor == "Red" yang dicatat sebagai ekspresi Boolean. Isi println("Stop") dicatat untuk hanya dieksekusi ketika ekspresi Boolean memiliki nilai benar. Di dalam klausa else, pernyataan println("Go") dinyatakan untuk hanya dieksekusi saat ekspresi Boolean bernilai salah.

Anda menetapkan ulang variabel trafficLightColor ke nilai "Green" sehingga ekspresi trafficLightColor == "Red" yang dievaluasi di cabang if menampilkan nilai false karena nilai "Green" tidak sama dengan nilai "Red".

Hasilnya, program akan melewati semua pernyataan di cabang if dan mengeksekusi semua pernyataan di dalam cabang else. Ini berarti fungsi println("Go") dieksekusi, tetapi fungsi println("Stop") tidak dieksekusi.

Menambahkan cabang else if

Biasanya, lampu lalu lintas juga memiliki warna kuning yang memberi tahu pengemudi untuk berkendara pelan-pelan. Anda dapat memperluas proses pengambilan keputusan program untuk menunjukkan ini.

Diagram alir yang menjelaskan keputusan yang dibuat saat lampu lalu lintas menyala merah. Tanda panah ya mengarah ke pesan "Berhenti!". Tanda panah tidak mengarah ke keputusan lain yang dibuat saat warna lampu lalu lintas berwarna kuning. Panah ya dari titik keputusan itu mengarah ke pesan "Lambat" dan panah tidak ada mengarah ke pesan "Mulai Melaju".

Anda telah mempelajari cara menulis kondisional yang memenuhi satu titik keputusan dengan pernyataan if/else yang berisi satu cabang if dan satu cabang else. Bagaimana Anda dapat menangani cabang yang lebih kompleks dengan beberapa titik keputusan? Saat menghadapi beberapa titik keputusan, Anda harus membuat kondisional dengan beberapa lapisan kondisi yang dapat dilakukan saat menambahkan cabang else if ke pernyataan if/else.

Setelah kurung kurawal tutup dari cabang if, Anda harus menambahkan kata kunci else if. Di dalam tanda kurung kata kunci else if, Anda perlu menambahkan ekspresi boolean sebagai kondisi untuk cabang else if diikuti dengan isi di dalam sepasang tanda kurung kurawal. Isi hanya dijalankan jika kondisi 1 gagal, tetapi kondisi 2 terpenuhi.

Diagram yang menjelaskan pernyataan if/else dengan kata kunci if yang diikuti dengan tanda kurung dengan blok kondisi 1 di dalamnya. Setelah itu, ada sepasang kurung kurawal dengan isi 1 di dalamnya.   Diikuti dengan pernyataan else jika kata kunci dengan tanda kurung dengan blok kondisi 2 di dalamnya. Kemudian diikuti sepasang kurung kurawal dengan blok isi 2 di dalamnya.  Kemudian diikuti kata kunci else dengan sepasang tanda kurung kurawal lainnya dengan blok isi 3 di dalamnya.

Cabang else if selalu berada setelah cabang if, tetapi sebelum cabang else. Anda dapat menggunakan beberapa cabang else if dalam pernyataan:

Diagram yang menunjukkan kondisi if/else dengan beberapa cabang else if di antara cabang if dan else. Teks yang dianotasikan di sekitar cabang else if menyatakan ada beberapa cabang else if.

Pernyataan if juga dapat berisi cabang if dan cabang else if tanpa cabang else:

Diagram yang menjelaskan pernyataan if/else dengan kata kunci if yang diikuti dengan tanda kurung dengan blok kondisi 1 di dalamnya. Setelah itu, ada sepasang kurung kurawal dengan isi 1 di dalamnya.   Diikuti dengan pernyataan kata kunci else if dengan tanda kurung dan blok kondisi 2 di dalamnya. Kemudian diikuti sepasang kurung kurawal dengan blok isi 2 di dalamnya.

Menambahkan cabang else if ke program Anda:

  1. Setelah kurung kurawal tutup dari pernyataan if, tambahkan ekspresi else if (trafficLightColor == "Yellow") yang diikuti dengan tanda kurung kurawal:
fun main() {
    val trafficLightColor = "Green"

    if (trafficLightColor == "Red") {
        println("Stop")
    } else if (trafficLightColor == "Yellow") {

    } else {
        println("Go")
    }
}
  1. Di dalam tanda kurung kurawal cabang else if, tambahkan pernyataan println(), lalu teruskan argumen string "Slow":
fun main() {
    val trafficLightColor = "Green"

    if (trafficLightColor == "Red") {
        println("Stop")
    } else if (trafficLightColor == "Yellow") {
        println("Slow")
    } else {
        println("Go")
    }
}
  1. Tetapkan ulang variabel trafficLightColor ke nilai string "Yellow":
fun main() {
    val trafficLightColor = "Yellow"

    if (trafficLightColor == "Red") {
        println("Stop")
    } else if (trafficLightColor == "Yellow") {
        println("Slow")
    } else {
        println("Go")
    }
}
  1. Jalankan program ini, lalu lihat output-nya:
Slow

Sekarang program akan mencetak pesan Slow, bukan pesan Stop atau Go.

Diagram yang menyoroti pernyataan if/else dengan kondisi trafficLightColor == "Red" dalam klausa if yang dicatat sebagai ekspresi Boolean 1 dan trafficLightColor == "Yeloow" dicatat sebagai ekspresi boolean 2. Isi println("stop") dicatat untuk hanya dieksekusi jika ekspresi Boolean 1 bernilai benar. Isi println("slow") dicatat untuk hanya dieksekusi jika ekspresi Boolean 1 bernilai salah, tetapi ekspresi Boolean 2 bernilai benar. Isi println("go") dicatat hanya untuk dieksekusi jika pernyataan Boolean 1 dan 2 bernilai salah.

Berikut alasan pesan hanya mencetak pesan Slow, bukan baris lainnya:

  • Variabel trafficLightColor diberi nilai "Yellow".
  • Nilai "Yellow" tidak sama dengan nilai "Red" sehingga ekspresi boolean cabang if (ditunjukkan sebagai 1 dalam gambar) menampilkan nilai false. Program ini melewati semua pernyataan di cabang if dan tidak mencetak pesan Stop.
  • Karena cabang if menghasilkan nilai false, program melanjutkan untuk mengevaluasi ekspresi boolean di dalam cabang else if.
  • Nilai "Yellow" sama dengan nilai "Yellow" sehingga ekspresi boolean cabang else if (ditunjukkan sebagai 2 dalam gambar) menampilkan nilai true. Program ini mengeksekusi semua pernyataan di dalam cabang else if dan mencetak pesan Slow.
  • Karena boolean expression dari cabang else if menampilkan nilai true, program akan melewati cabang lainnya. Dengan demikian, semua pernyataan di cabang else tidak dieksekusi dan program tidak mencetak pesan Go.

Coba

Apakah Anda memperhatikan bahwa program saat ini berisi bug?

Di Unit 1, Anda telah mempelajari jenis bug yang disebut error kompilasi saat Kotlin tidak dapat mengompilasi kode karena error sintaksis dalam kode Anda dan program tidak dapat berjalan. Di sini, Anda akan menemukan jenis bug lain yang disebut error logika tempat program dapat berjalan, tetapi tidak menghasilkan output seperti yang diinginkan.

Sebenarnya, Anda hanya ingin pengemudi berkendara hanya saat warna lampu lalu lintas berwarna hijau. Bagaimana jika lampu lalu lintas rusak dan dimatikan? Apakah Anda ingin pengemudi tetap mengemudi atau menerima peringatan bahwa ada sesuatu yang tidak beres?

Sayangnya, pada program saat ini, jika lampu lalu lintas yang menyala warnanya bukan merah atau kuning, pengemudi tetap disarankan untuk terus melaju.

Perbaiki masalah ini:

  1. Tetapkan ulang variabel trafficLightColor ke nilai "Black" untuk mengilustrasikan lampu lalu lintas yang dinonaktifkan:
fun main() {
    val trafficLightColor = "Black"

    if (trafficLightColor == "Red") {
        println("Stop")
    } else if (trafficLightColor == "Yellow") {
        println("Slow")
    } else {
        println("Go")
    }
}
  1. Jalankan program ini, lalu lihat output-nya:
Go

Perhatikan bahwa program akan mencetak pesan Go meskipun variabel trafficLightColor tidak diberi nilai "Green". Bisakah Anda memperbaiki program ini agar menunjukkan perilaku yang benar?

Diagram alir yang menjelaskan keputusan yang dibuat saat lampu lalu lintas menyala merah. Tanda panah ya mengarah ke pesan "Berhenti!". Tanda panah tidak mengarah ke keputusan lain yang dibuat saat warna lampu lalu lintas berwarna kuning. Tanda panah ya dari keputusan tersebut mengarah ke pesan "Lambat" dan panah "Tidak" mengarah ke keputusan lain yang dibuat jika warna lampu lalu lintas hijau. Tanda panah ya dari keputusan tersebut mengarah ke pesan "Melaju" dan tanda panah tidak mengarah ke pesan "Warna tidak berlaku".

Anda perlu memodifikasi program agar dapat mencetak:

  • Pesan Go hanya jika variabel trafficLightColor diberi nilai "Green".
  • Pesan Invalid traffic-light color saat variabel trafficLightColor tidak diberi nilai "Red", "Yellow", atau "Green".

Memperbaiki cabang else

Cabang else selalu berada di akhir pernyataan if/else karena merupakan cabang catchall. Fitur ini otomatis dieksekusi jika semua kondisi lain dalam cabang sebelumnya tidak terpenuhi. Dengan demikian, cabang else tidak akan cocok apabila Anda ingin tindakan dieksekusi hanya jika memenuhi kondisi tertentu. Untuk lampu lalu lintas, Anda dapat menggunakan cabang else if guna menentukan kondisi lampu hijau.

Gunakan cabang else if untuk mengevaluasi kondisi lampu lalu lintas berwarna hijau:

  1. Setelah cabang else if saat ini, tambahkan cabang else if (trafficLightColor == "Green") lain:
fun main() {
    val trafficLightColor = "Black"

    if (trafficLightColor == "Red") {
        println("Stop")
    } else if (trafficLightColor == "Yellow") {
        println("Slow")
    } else if (trafficLightColor == "Green") {
        println("Go")
    }
}
  1. Jalankan program ini, lalu lihat output-nya.

Outputnya kosong karena Anda tidak memiliki cabang else yang dieksekusi saat kondisi sebelumnya tidak terpenuhi.

  1. Setelah cabang else if terakhir, tambahkan cabang else dengan pernyataan println("Invalid traffic-light color") di dalamnya:
fun main() {
    val trafficLightColor = "Black"

    if (trafficLightColor == "Red") {
        println("Stop")
    } else if (trafficLightColor == "Yellow") {
        println("Slow")
    } else if (trafficLightColor == "Green") {
        println("Go")
    } else {
        println("Invalid traffic-light color")
    }

}
  1. Jalankan program ini, lalu lihat output-nya:
Invalid traffic-light color
  1. Tetapkan nilai trafficLightColor variabel lain selain "Red", "Yellow", atau "Green", lalu jalankan kembali program.

Apa output program ini?

Praktik pemrograman dikatakan baik apabila memiliki cabang else if eksplisit sebagai validasi input untuk warna hijau dan cabang else untuk menangkap input tidak valid lainnya. Ini memastikan pengemudi diarahkan untuk melaju, hanya jika lampu lalu lintas berwarna hijau. Untuk kasus lainnya, ada pesan eksplisit yang disampaikan bahwa lampu lalu lintas tidak berfungsi seperti yang diharapkan.

3. Menggunakan pernyataan when untuk beberapa cabang

Program trafficLightColor Anda terlihat lebih kompleks dengan beberapa kondisi, atau disebut juga sebagai cabang. Anda mungkin bertanya-tanya apakah Anda dapat menyederhanakan program yang memiliki jumlah cabang sangat banyak.

Di Kotlin, saat menangani beberapa cabang, Anda dapat menggunakan pernyataan when sebagai ganti pernyataan if/else karena akan meningkatkan keterbacaan, yang mengacu pada kemudahan bagi pembaca manusia, biasanya developer, untuk membaca kode. Sangat penting bagi Anda untuk mempertimbangkan keterbacaan saat menulis kode karena kemungkinan developer lain perlu meninjau dan mengubah kode tersebut selama masa penggunaannya. Keterbacaan yang baik memastikan bahwa developer dapat memahami kode Anda dengan benar dan tidak memasukkan bug ke dalamnya secara tidak sengaja.

Pernyataan when lebih disarankan jika ada lebih dari dua cabang untuk dipertimbangkan.

Diagram yang menunjukkan anatomi pernyataan when. Dimulai dengan kata kunci saat diikuti dengan dua tanda kurung kurawal dengan blok parameter di dalamnya. Selanjutnya, ada tiga baris kasus di dalam pasangan kurung kurawal. Di dalam setiap baris, terdapat blok kondisi diikuti dengan simbol panah dan blok isi. Perlu diperhatikan bahwa setiap baris kasus dievaluasi secara berurutan.

Pernyataan when menerima satu nilai melalui parameter. Nilai ini kemudian dievaluasi dengan membandingkannya ke setiap kondisi secara berurutan. Isi kondisi pertama yang terpenuhi kemudian akan dieksekusi. Setiap kondisi dan isi dipisahkan dengan panah (->). Serupa dengan pernyataan if/else, setiap pasangan kondisi dan isi dalam pernyataan when disebut cabang. Serupa dengan pernyataan if/else, Anda dapat menambahkan cabang else sebagai kondisi akhir dalam pernyataan when yang berfungsi sebagai cabang catchall.

Tulis ulang pernyataan if/else dengan pernyataan when

Dalam program lampu lalu lintas, sudah terdapat beberapa cabang:

  • Warna lampu lalu lintas merah
  • Warna lampu lalu lintas kuning
  • Warna lampu lalu lintas hijau
  • Warna lampu lalu lintas lainnya

Konversikan program untuk menggunakan pernyataan when:

  1. Dalam fungsi main(), hapus pernyataan if/else:
fun main() {
    val trafficLightColor = "Black"

}
  1. Tambahkan pernyataan when, lalu teruskan variabel trafficLightColor sebagai argumen:
fun main() {
    val trafficLightColor = "Black"

    when (trafficLightColor) {
    }
}
  1. Di bagian isi pernyataan when, tambahkan kondisi "Red" diikuti dengan panah dan isi println("Stop"):
fun main() {
    val trafficLightColor = "Black"

    when (trafficLightColor) {
        "Red" -> println("Stop")
    }
}
  1. Di baris berikutnya, tambahkan kondisi "Yellow" diikuti dengan tanda panah dan isi println("Slow"):
fun main() {
    val trafficLightColor = "Black"

    when (trafficLightColor) {
        "Red" -> println("Stop")
        "Yellow" -> println("Slow")
    }
}
  1. Di baris berikutnya, tambahkan kondisi "Green" diikuti dengan tanda panah, lalu isi println("Go"):
fun main() {
    val trafficLightColor = "Black"

    when (trafficLightColor) {
        "Red" -> println("Stop")
        "Yellow" -> println("Slow")
        "Green" -> println("Go")
    }
}
  1. Pada baris berikutnya, tambahkan kata kunci else diikuti dengan tanda panah, lalu isi println("Invalid traffic-light color"):
fun main() {
    val trafficLightColor = "Black"

    when (trafficLightColor) {
        "Red" -> println("Stop")
        "Yellow" -> println("Slow")
        "Green" -> println("Go")
        else -> println("Invalid traffic-light color")
    }
}
  1. Tetapkan ulang variabel trafficLightColor ke nilai "Yellow":
fun main() {
    val trafficLightColor = "Yellow"

    when (trafficLightColor) {
        "Red" -> println("Stop")
        "Yellow" -> println("Slow")
        "Green" -> println("Go")
        else -> println("Invalid traffic-light color")
    }
}

Saat menjalankan program ini, bagaimana pendapat Anda terhadap hasilnya?

  1. Jalankan program, lalu lihat output-nya:
Slow

Diagram yang menganotasi pernyataan when. Baris "Red" -> println("Stop") dianotasi sebagai kasus 1. Baris "Yellow" -> println("Slow") dianotasi sebagai kasus 2. Baris "Green" -> println("Go") dianotasi sebagai kasus 3. Baris else -> println("Invalid traffic-light color") dianotasikan sebagai kasus 4.

Outputnya adalah pesan Slow karena:

  • Variabel trafficLightColor diberi nilai "Yellow".
  • Program ini mengevaluasi setiap kondisi satu per satu secara berurutan.
  • Nilai "Yellow" tidak sama dengan nilai "Red" sehingga program melewati isi pertama.
  • Nilai "Yellow" sama dengan nilai "Yellow" sehingga program mengeksekusi isi kedua dan mencetak pesan Slow.
  • Isi akan dieksekusi sehingga program mengabaikan cabang ketiga dan keempat serta meninggalkan pernyataan when.

Menulis kondisi yang lebih kompleks dalam pernyataan when

Sejauh ini Anda telah mempelajari cara menulis kondisi when untuk satu kondisi yang sama, seperti saat variabel trafficLightColor diberi nilai "Yellow". Selanjutnya, Anda belajar menggunakan koma (,), kata kunci in, dan kata kunci is untuk membentuk kondisi when yang lebih kompleks.

Buat program yang menentukan apakah bilangan antara 1 hingga 10 adalah bilangan prima:

  1. Buka Kotlin playground di jendela terpisah.

Anda nanti akan kembali ke program lampu lalu lintas.

  1. Tentukan variabel x, lalu tetapkan nilai 3:
fun main() {
    val x = 3
}
  1. Tambahkan pernyataan when yang menyertakan beberapa cabang untuk kondisi 2,3,5 dan 7, lalu ikuti setiap isi dengan isi println("x is prime number between 1 and 10."):
fun main() {
    val x = 3

    when (x) {
        2 -> println("x is a prime number between 1 and 10.")
        3 -> println("x is a prime number between 1 and 10.")
        5 -> println("x is a prime number between 1 and 10.")
        7 -> println("x is a prime number between 1 and 10.")
    }
}
  1. Tambahkan cabang else dengan isi println("x is not prime number between 1 and 10."):
fun main() {
    val x = 3

    when (x) {
        2 -> println("x is a prime number between 1 and 10.")
        3 -> println("x is a prime number between 1 and 10.")
        5 -> println("x is a prime number between 1 and 10.")
        7 -> println("x is a prime number between 1 and 10.")
        else -> println("x isn't a prime number between 1 and 10.")
    }
}
  1. Jalankan program, lalu verifikasi bahwa outputnya seperti yang diharapkan:
x is a prime number between 1 and 10.

Gunakan koma (,) untuk beberapa kondisi

Program bilangan prima berisi banyak pengulangan pernyataan println(). Saat menulis pernyataan when, Anda dapat menggunakan koma (,) untuk menunjukkan beberapa kondisi yang sesuai dengan isi yang sama.

Diagram yang menunjukkan anatomi pernyataan when. Diawali dengan kata kunci when lalu diikuti tanda kurung dengan blok parameter di dalamnya. Selanjutnya, ada dua baris kasus di dalam pasangan kurung kurawal. Pada baris pertama, ada blok kondisi 1 yang diikuti dengan koma, lalu diikuti blok kondisi 2 yang diikuti dengan simbol panah dan blok isi. Pada baris kedua, ada blok kondisi yang diikuti dengan simbol panah dan blok isi.

Pada diagram sebelumnya, jika kondisi pertama atau kedua terpenuhi, isi yang sesuai akan dieksekusi.

Tulis ulang program bilangan prima dengan konsep ini:

  1. Di cabang untuk kondisi 2, tambahkan 3, 5, dan 7 dipisahkan dengan koma (,):
fun main() {
    val x = 3

    when (x) {
        2, 3, 5, 7 -> println("x is a prime number between 1 and 10.")
        3 -> println("x is a prime number between 1 and 10.")
        5 -> println("x is a prime number between 1 and 10.")
        7 -> println("x is a prime number between 1 and 10.")
        else -> println("x isn't a prime number between 1 and 10.")
    }
}
  1. Hapus setiap cabang untuk kondisi 3, 5, dan 7:
fun main() {
    val x = 3

    when (x) {
        2, 3, 5, 7 -> println("x is a prime number between 1 and 10.")
        else -> println("x isn't a prime number between 1 and 10.")
    }
}
  1. Jalankan program, lalu verifikasi bahwa outputnya seperti yang diharapkan:
x is a prime number between 1 and 10.

Gunakan kata kunci in untuk berbagai kondisi

Selain simbol koma (,) untuk menunjukkan beberapa kondisi, Anda juga dapat menggunakan kata kunci in dan rentang nilai di cabang when.

Diagram yang menunjukkan anatomi pernyataan when. Diawali dengan kata kunci when lalu diikuti tanda kurung dengan blok parameter di dalamnya. Selanjutnya, ada dua baris kasus di dalam pasangan kurung kurawal. Pada baris pertama, ada kata kunci in yang diikuti oleh blok awal rentang, dua titik, blok akhir rentang, simbol panah, dan blok isi. Pada baris kedua, ada blok kondisi yang diikuti dengan simbol panah dan blok isi.

Untuk menggunakan rentang nilai, tambahkan angka yang menunjukkan awal rentang yang diikuti dengan dua titik tanpa spasi, lalu tutup dengan angka lain yang menunjukkan akhir rentang tersebut.

Jika nilai parameter sama dengan nilai berapa pun dalam rentang antara awal rentang dan akhir rentang, isi pertama akan dieksekusi.

Dalam program bilangan prima, dapatkah Anda mencetak pesan jika bilangannya antara 1 hingga 10, tetapi bukan bilangan prima?

Tambahkan cabang lain dengan kata kunci in:

  1. Setelah cabang pertama pernyataan when, tambahkan cabang kedua dengan kata kunci in diikuti dengan rentang 1..10 dan isi println("x is a number between 1 and 10, but not a prime number."):
fun main() {
    val x = 3

    when (x) {
        2, 3, 5, 7 -> println("x is a prime number between 1 and 10.")
        in 1..10 -> println("x is a number between 1 and 10, but not a prime number.")
        else -> println("x isn't a prime number between 1 and 10.")
    }
}
  1. Ubah variabel x menjadi nilai 4:
fun main() {
    val x = 4

    when (x) {
        2, 3, 5, 7 -> println("x is a prime number between 1 and 10.")
        in 1..10 -> println("x is a number between 1 and 10, but not a prime number.")
        else -> println("x isn't a prime number between 1 and 10.")
    }
}
  1. Jalankan program, lalu verifikasi output:
x is a number between 1 and 10, but not a prime number.

Program akan mencetak pesan cabang kedua, tetapi bukan pesan cabang pertama atau ketiga.

Diagram yang menganotasi pernyataan when. Baris 2,3,5,7 -> println("x is a prime number between 1 and 10.") dianotasi sebagai kasus 1. Baris in 1..10 -> println("x is a number between 1 and 10, but not a prime number.") dianotasi sebagai kasus 2. Baris else -> println("x isn't a prime number between 1 and 10.") dianotasikan sebagai kasus 3.

Cara kerja program ini ialah sebagai berikut:

  • Variabel x diberi nilai 4.
  • Kemudian program akan mengevaluasi kondisi untuk cabang pertama. Nilai 4 bukan nilai 2, 3, 5, atau 7 sehingga program akan melewati eksekusi bagian isi pertama dan berlanjut ke cabang kedua.
  • Nilai 4 antara 1 dan 10 sehingga pesan isi x is a number between 1 and 10, but not a prime number. akan dicetak.
  • Satu isi dieksekusi sehingga program melanjutkan untuk meninggalkan pernyataan when dan mengabaikan cabang else.

Menggunakan kata kunci is untuk memeriksa jenis data

Anda dapat menggunakan kata kunci is sebagai kondisi untuk memeriksa jenis data nilai yang dievaluasi.

Diagram yang menunjukkan anatomi pernyataan when. Diawali dengan kata kunci when lalu diikuti tanda kurung dengan blok parameter di dalamnya. Selanjutnya, ada dua baris kasus di dalam pasangan kurung kurawal. Pada baris pertama, ada kata kunci in yang diikuti oleh blok jenis, simbol panah, dan blok isi. Pada baris kedua, ada blok kondisi yang diikuti dengan simbol panah, lalu blok isi.

Pada diagram sebelumnya, jika nilai argumen berasal dari jenis data yang dinyatakan, isi pertama akan dieksekusi.

Dalam program bilangan prima, dapatkah Anda mencetak pesan jika input-nya merupakan bilangan bulat di luar rentang 1 sampai 10?

Tambahkan cabang lain dengan kata kunci is:

  1. Ubah x menjadi jenis Any. Ini menandakan bahwa x dapat memiliki nilai selain jenis Int.
fun main() {
    val x: Any = 4

    when (x) {
        2, 3, 5, 7 -> println("x is a prime number between 1 and 10.")
        in 1..10 -> println("x is a number between 1 and 10, but not a prime number.")
        else -> println("x isn't a prime number between 1 and 10.")
    }
}
  1. Setelah cabang kedua pernyataan when, tambahkan kata kunci is dan jenis data Int dengan isi println("x is an integer number, but not between 1 and 10."):
fun main() {
    val x: Any = 4

    when (x) {
        2, 3, 5, 7 -> println("x is a prime number between 1 and 10.")
        in 1..10 -> println("x is a number between 1 and 10, but not a prime number.")
        is Int -> println("x is an integer number, but not between 1 and 10.")
        else -> println("x isn't a prime number between 1 and 10.")
    }
}
  1. Di cabang else, ubah isi menjadi println("x isn't an integer number.")isi:
fun main() {
    val x: Any = 4

    when (x) {
        2, 3, 5, 7 -> println("x is a prime number between 1 and 10.")
        in 1..10 -> println("x is a number between 1 and 10, but not a prime number.")
        is Int -> println("x is an integer number, but not between 1 and 10.")
        else -> println("x isn't an integer number.")
    }
}
  1. Ubah variabel x menjadi nilai 20:
fun main() {
    val x: Any = 20

    when (x) {
        2, 3, 5, 7 -> println("x is a prime number between 1 and 10.")
        in 1..10 -> println("x is a number between 1 and 10, but not a prime number.")
        is Int -> println("x is an integer number, but not between 1 and 10.")
        else -> println("x isn't an integer number.")
    }
}
  1. Jalankan program, lalu verifikasi output:
x is an integer number, but not between 1 and 10.

Program akan mencetak pesan cabang ketiga, tetapi tidak mengirimkan pesan cabang pertama, kedua, atau keempat.

Diagram yang menganotasi pernyataan when. Baris 2,3,5,7 -> println("x is a prime number between 1 and 10.") dianotasi sebagai kasus 1. Baris in 1..10 -> println("x is a number between 1 and 10, but not a prime number.") dianotasi sebagai kasus 2. Baris is Int -> println("x is an integer number, but not between 1 and 10.") dianotasi sebagai kasus 3. Baris else -> println("x isn't an integer number.") dianotasi sebagai kasus 4.

Berikut cara kerja program tersebut:

  • Variabel x diberi nilai 20.
  • Kemudian program akan mengevaluasi kondisi untuk cabang pertama. Nilai 20 bukan nilai 2, 3, 5, atau 7 sehingga program akan melewati eksekusi bagian isi pertama dan berlanjut ke cabang kedua.
  • Nilai 20 tidak berada di dalam rentang 1 hingga 10 sehingga program melewati eksekusi bagian isi kedua dan berlanjut ke cabang ketiga.
  • Nilai 20 adalah dari jenis Int sehingga isi x is an integer number, but not between 1 and 10 dicetak.
  • Satu isi dieksekusi sehingga program melanjutkan untuk meninggalkan pernyataan when dan mengabaikan cabang else.

Coba

Sekarang praktikkan apa yang telah Anda pelajari di program lampu lalu lintas.

Bayangkan ada warna lampu lalu lintas amber di beberapa negara yang memperingatkan pengemudi dengan cara yang sama seperti lampu lalu lintas berwarna kuning di negara lain. Dapatkah Anda memodifikasi program agar ketentuan tambahan ini tercakup dan mempertahankan kondisi awal?

Menambahkan kondisi tambahan dengan isi yang sama

Tambahkan kondisi tambahan ke program lampu lalu lintas:

  1. Jika Anda masih membukanya, kembali ke instance Kotlin Playground dengan program lampu lalu lintas Anda.
  2. Jika Anda sudah menutupnya, buka instance Kotlin Playground baru, lalu masukkan kode ini:
fun main() {
    val trafficLightColor = "Yellow"

    when (trafficLightColor) {
        "Red" -> println("Stop")
        "Yellow" -> println("Slow")
        "Green" -> println("Go")
        else -> println("Invalid traffic-light color")
    }
}
  1. Di cabang kedua pernyataan when, tambahkan koma setelah kondisi "Yellow", lalu kondisi "Amber":
fun main() {
    val trafficLightColor = "Yellow"

    when (trafficLightColor) {
        "Red" -> println("Stop")
        "Yellow", "Amber" -> println("Slow")
        "Green" -> println("Go")
        else -> println("Invalid traffic-light color")
    }
}
  1. Ubah variabel trafficLightColor menjadi nilai "Amber":
fun main() {
    val trafficLightColor = "Amber"

    when (trafficLightColor) {
        "Red" -> println("Stop")
        "Yellow", "Amber" -> println("Slow")
        "Green" -> println("Go")
        else -> println("Invalid traffic-light color")
    }
}
  1. Jalankan program ini, lalu verifikasi output-nya:
Slow

4. Menggunakan if/else dan when sebagai ekspresi

Anda telah mempelajari cara menggunakan if/else dan when sebagai pernyataan. Saat menggunakan kondisional sebagai pernyataan, Anda mengizinkan setiap cabang untuk mengeksekusi tindakan yang berbeda dalam isi berdasarkan kondisi.

Anda juga dapat menggunakan kondisional sebagai ekspresi untuk menampilkan nilai yang berbeda untuk setiap cabang kondisi. Jika isi setiap cabang tampak serupa, Anda sebaiknya menggunakan ekspresi bersyarat untuk meningkatkan keterbacaan kode, daripada menggunakan pernyataan bersyarat.

Diagram yang menjelaskan ekspresi if/else dengan kata kunci val diikuti blok nama, simbol sama dengan, kata kunci if, tanda kurung dengan kondisi di dalamnya, sepasang tanda kurung kurawal dengan blok isi 1 di dalamnya, kata kunci lain, lalu sepasang kurung kurawal dengan blok isi di dalamnya.

Sintaksis untuk kondisional sebagai ekspresi mirip dengan pernyataan, tetapi baris terakhir isi di setiap cabang harus menampilkan nilai atau ekspresi, dan kondisional ditetapkan ke variabel.

Jika isi hanya berisi nilai atau ekspresi yang ditampilkan, Anda dapat menghapus tanda kurung kurawal agar kode lebih ringkas.

Diagram yang menjelaskan ekspresi if/else dengan kata kunci val diikuti oleh blok nama, simbol sama dengan, kata kunci if,  tanda kurung dengan kondisi di dalamnya, blok ekspresi 1, kata kunci else, lalu blok ekspresi 2.

Di bagian berikutnya, Anda akan melihat ekspresi if/else melalui program lampu lalu lintas.

Mengonversi pernyataan if menjadi suatu ekspresi

Ada banyak pengulangan pernyataan println() dalam pernyataan if/else ini:

fun main() {
    val trafficLightColor = "Black"

    if (trafficLightColor == "Red") {
        println("Stop")
    } else if (trafficLightColor == "Yellow") {
        println("Slow")
    } else if (trafficLightColor == "Green") {
        println("Go")
    } else {
        println("Invalid traffic-light color")
    }

}

Konversikan pernyataan if/else ini menjadi ekspresi if/else dan hapus pengulangan ini:

  1. Di Kotlin Playground, masukkan program lampu lalu lintas sebelumnya.
  2. Tentukan variabel message, lalu tetapkan pernyataan if/else:
fun main() {
    val trafficLightColor = "Black"

    val message = if (trafficLightColor == "Red") {
        println("Stop")
    } else if (trafficLightColor == "Yellow") {
        println("Slow")
    } else if (trafficLightColor == "Green") {
        println("Go")
    } else {
        println("Invalid traffic-light color")
    }

}
  1. Hapus semua pernyataan println() dan tanda kurung kurawal, tetapi biarkan nilai tetap di dalamnya:
fun main() {
    val trafficLightColor = "Black"

    val message =
      if (trafficLightColor == "Red") "Stop"
      else if (trafficLightColor == "Yellow") "Slow"
      else if (trafficLightColor == "Green") "Go"
      else "Invalid traffic-light color"
}
  1. Tambahkan pernyataan println() ke akhir program, lalu teruskan variabel message sebagai argumen:
fun main() {
    val trafficLightColor = "Black"

    val message =
      if (trafficLightColor == "Red") "Stop"
      else if (trafficLightColor == "Yellow") "Slow"
      else if (trafficLightColor == "Green") "Go"
      else "Invalid traffic-light color"

    println(message)
}
  1. Jalankan program ini, lalu lihat output-nya:
Invalid traffic-light color

Coba

Konversi program lampu lalu lintas untuk menggunakan ekspresi when, bukan pernyataan when:

  1. Di Kotlin Playground, masukkan kode ini:
fun main() {
    val trafficLightColor = "Amber"

    when (trafficLightColor) {
        "Red" -> println("Stop")
        "Yellow", "Amber" -> println("Slow")
        "Green" -> println("Go")
        else -> println("Invalid traffic-light color")
    }
}

Dapatkah Anda mengonversi pernyataan when menjadi suatu ekspresi sehingga Anda tidak perlu mengulangi pernyataan println()?

  1. Buat variabel message dan tetapkan ke ekspresi when:
fun main() {
    val trafficLightColor = "Amber"

    val message = when(trafficLightColor) {
        "Red" -> "Stop"
        "Yellow", "Amber" -> "Proceed with caution."
        "Green" -> "Go"
        else -> "Invalid traffic-light color"
    }
}
  1. Tambahkan pernyataan println() sebagai baris terakhir program, lalu teruskan variabel message sebagai argumen:
fun main() {
    val trafficLightColor = "Amber"

    val message = when(trafficLightColor) {
        "Red" -> "Stop"
        "Yellow", "Amber" -> "Proceed with caution."
        "Green" -> "Go"
        else -> "Invalid traffic-light color"
    }
    println(message)
}

5. Kesimpulan

Selamat! Anda telah mempelajari kondisional dan cara menulisnya di Kotlin.

Ringkasan

  • Di Kotlin, cabang dapat dicapai dengan kondisional if/else atau when.
  • Isi cabang if dalam kondisional if/else hanya dieksekusi saat ekspresi boolean dalam kondisi cabang if menampilkan nilai true.
  • Cabang else if berikutnya di if/else bersyarat hanya dieksekusi saat cabang if atau else if sebelumnya menampilkan nilai false.
  • Cabang else terakhir dalam kondisional if/else hanya dieksekusi ketika semua cabang if atau else if sebelumnya menampilkan nilai false.
  • Sebaiknya gunakan kondisional when untuk menggantikan kondisional if/else jika ada lebih dari dua cabang.
  • Anda dapat menulis kondisi yang lebih kompleks dalam kondisional when dengan koma (,), rentang in, dan kata kunci is.
  • Kondisional if/else dan when dapat berfungsi sebagai sebuah pernyataan atau ekspresi.

Pelajari lebih lanjut