Menambahkan perilaku kondisional di Kotlin

1. Sebelum memulai

Dalam codelab Kotlin ini, Anda akan membuat game dadu lain, yaitu Lucky Dice Roll, dan mencoba melempar angka keberuntungan. Program Anda akan menetapkan angka keberuntungan dan melempar dadu. Kemudian Anda memeriksa apakah lemparan memunculkan angka keberuntungan dan mencetak pesan yang sesuai untuk output-nya. Untuk melakukannya, Anda akan mempelajari cara membandingkan nilai dan membuat keputusan yang berbeda dalam program Kotlin.

Untuk membantu Anda berfokus pada konsep pemrograman tanpa perlu khawatir tentang antarmuka pengguna aplikasi, Anda akan menggunakan alat pemrograman Kotlin berbasis browser dan mengeluarkan hasilnya ke konsol.

Prasyarat

Yang akan Anda pelajari

  • Cara menggunakan pernyataan if dan else.
  • Cara membandingkan nilai menggunakan operator seperti lebih besar dari (>), kurang dari (<), dan sama dengan (==).
  • Cara menggunakan pernyataan when untuk memilih opsi berdasarkan nilai yang diberikan.
  • Jenis data Boolean dan cara menggunakan nilai true dan false untuk pengambilan keputusan.

Yang akan Anda build

  • Game dadu berbasis Kotlin, Lucky Dice Roll, yang memungkinkan Anda menentukan angka keberuntungan. Pemain akan menang jika berhasil mendapatkan angka keberuntungan.

Yang Anda perlukan

  • Komputer dengan koneksi internet.

2. Pengambilan keputusan dalam kode Anda

Program Lucky Dice Roller Anda harus dapat menentukan apakah pengguna telah berhasil mendapatkan angka keberuntungan dan memperoleh ucapan selamat, atau justru mendapatkan pesan untuk mencoba lagi.

Sebagai developer aplikasi, Anda perlu membuat keputusan tentang perilaku aplikasi dan membuat hasil yang berbeda bagi pengguna.

Jika sedang mem-build aplikasi belanja, Anda dapat menampilkan layar yang berbeda berdasarkan opsi pengiriman yang dipilih oleh pengguna. Untuk game kuis, Anda akan menampilkan layar yang berbeda berdasarkan jawaban pemain, apakah benar atau salah. Bergantung pada aplikasinya, kemungkinan ada banyak hasil yang mungkin ingin Anda pertimbangkan dalam kode ini.

Dalam program Lucky Dice Roller, aplikasi harus menangani berbagai kasus seperti:

  • If lemparan dadu menunjukkan angka keberuntungan, tampilkan pesan ucapan selamat!
  • Else if lemparan dadu tidak menunjukkan angka keberuntungan, tampilkan pesan untuk mencoba lagi.

Untuk menambahkan logika ini ke kode Anda, gunakan kata kunci Kotlin khusus seperti if dan else serta when.

Mari kita lihat beberapa contohnya.

Menggunakan pernyataan if untuk menyiapkan kondisi yang terpenuhi

  1. Periksa kode di bawah ini. Dapatkah Anda menebak output yang akan dihasilkan?
fun main() {
   val num = 5
   if (num > 4) {
       println("The variable is greater than 4")
   }
}
  1. Salin dan tempel kode di editor program Kotlin dan jalankan program untuk mengamati output-nya.
The variable is greater than 4

Proses pengambilan keputusan untuk program ini adalah:

  1. Buat variabel num dan tetapkan ke 5.
  2. Jika num lebih besar dari 4, cetak "The variable is greater than 4".
  3. Jangan lakukan apa pun di situasi lain.

Pada contoh di atas, num ditetapkan ke 5. Pernyataan if membandingkan apakah variabel lebih besar dari 4. Karena pernyataan itu benar, selanjutnya sistem akan mengeksekusi petunjuk dalam tanda kurung kurawal dan mencetak pesan.

Perhatikan format umum untuk pernyataan if:

  • Mulai dengan kata kunci if.
  • Ikuti dengan dua tanda kurung (). Di dalam tanda kurung terdapat kondisinya. Kondisinya adalah apa pun yang dapat bersifat true atau false. Misalnya, apakah suatu angka lebih besar dari angka lain.
  • Ikuti dengan dua tanda kurung kurawal {}. Di dalam tanda kurung kurawal, tempatkan kode yang akan dieksekusi jika kondisinya true.
if (condition-is-true) {
    execute-this-code
}

Menggunakan pernyataan if untuk menyiapkan kondisi yang tidak terpenuhi

  1. Ubah nilai num menjadi 3, seperti yang ditunjukkan di bawah ini. Apa yang diharapkan terjadi jika Anda menjalankan kode ini?
fun main() {
    val num = 3
    if (num > 4) {
        println("The variable is greater than 4")
    }
}
  1. Salin dan tempel kode di editor program Kotlin dan jalankan program untuk mengamati output-nya yang kosong.

Dengan num ditetapkan ke 3, maka tidak akan ada yang dicetak karena nilai num kurang dari 4. Jadi, kondisi bahwa num lebih besar dari 4 adalah false, dan kode di antara kurung kurawal tidak dieksekusi dan tidak ada yang dicetak.

Menggunakan else untuk membuat alternatif kondisi yang gagal

Daripada tidak melakukan apa pun, Anda dapat menawarkan suatu alternatif kepada pengguna saat kondisi tidak terpenuhi. Sama seperti bahasa biasa, Anda dapat melakukannya dengan pernyataan else.

  1. Tambahkan pernyataan else untuk mencetak pesan jika num tidak lebih dari 4, seperti yang ditunjukkan di bawah. Apa yang diharapkan terjadi jika Anda menjalankan kode ini?
fun main() {
    val num = 3
    if (num > 4) {
        println("The variable is greater than 4")
    } else {
        println("The variable is less than 4")
    }
}
  1. Salin dan tempel kode di editor program Kotlin dan jalankan program untuk mengamati output-nya.
The variable is less than 4
  1. Perhatikan bahwa saat num memiliki nilai 3, program akan mencetak pesan "The variable is less than 4" yang terkait dengan pernyataan else karena num tidak lebih besar dari 4.
  2. Ubah num ke 5 dan jalankan programnya lagi. Sekarang benar bahwa num lebih besar dari 4 dan program mencetak "The variable is greater than 4".
  3. Ubah num menjadi 4 dan jalankan program Anda. Sekarang 4 tidak lebih dari 4, dan program mencetak "The variable is less than 4".

Meskipun "The variable is less than 4" adalah output yang benar untuk kondisi yang sudah Anda tetapkan dalam kode, pernyataan cetak tersebut tidak akurat karena 4 tidak kurang dari 4. Sebagai pilihan, Anda dapat menambahkan kondisi lain yang memeriksa kemungkinan ketiga, apakah num sama dengan 4, dan mencetak pernyataan yang benar saat kondisi tersebut benar (true).

Menggunakan kombinasi else if untuk menambahkan kondisi alternatif

Anda dapat memiliki lebih dari satu kondisi. Sebagai contoh, ini adalah cara Anda mencakup semua kemungkinan untuk num:

  • If num lebih besar dari 4, cetak "The variable is greater than 4".
  • Else if num sama dengan 4, cetak "The variable is equal to 4".
  • Else, cetak "The variable is less than 4".

Ini disebut sebagai kasus yang berbeda dalam pernyataan if-else. Ada 3 kasus yang dicantumkan.

Kode yang diperbarui terlihat seperti berikut:

fun main() {
    val num = 4
    if (num > 4) {
        println("The variable is greater than 4")
    } else if (num == 4) {
        println("The variable is equal to 4")
    } else {
        println("The variable is less than 4")
    }
}

Perhatikan perubahan berikut:

  • Nilai num sekarang ditetapkan ke 4 sehingga Anda dapat menguji kondisi baru.
  • Di antara pernyataan if dan else yang asli adalah pernyataan else if baru untuk kasus jika num adalah 4.
  1. Salin dan tempel kode di atas dalam editor program Kotlin dan jalankan program untuk mengamati output-nya.
The variable is equal to 4
  1. Lakukan eksperimen dengan mengubah nilai num, dan lihat pengaruhnya terhadap output. Ubah num ke 2 dan 6 sehingga Anda dapat melihat setiap kondisinya menjadi true.

Alur kontrol

Jika Anda melihat pernyataan if-else di atas, kode akan dieksekusi, atau dijalankan sebagai alur, seperti yang dikontrol oleh kondisi. Jadi, cara Anda memandu eksekusi dengan persyaratan ini disebut "alur kontrol" program.

  • Misalnya, num dadu Anda adalah 3. Program ini akan memeriksa kondisi pertama (num > 4). Kondisi ini salah (false) sehingga program memeriksa kondisi berikutnya (num == 4) yang juga bernilai salah (false). Kemudian program mengeksekusi kode pernyataan else, yang merupakan opsi terakhir.
  • Jika angka lemparan dadu Anda adalah 6, kondisi pertama (num > 4) bernilai benar (true). Program akan mencetak pesan "The variable is greater than 4". Karena kondisi ini bernilai benar (true), program tidak perlu memeriksa sisanya, dan sudah selesai dengan pernyataan if-else.
  • Gunakan kombinasi else + if untuk menambahkan kondisi alternatif.

3. Membuat game Lucky Dice Roll

Di bagian ini, dengan menggunakan apa yang telah Anda pelajari di tugas sebelumnya, Anda akan mengupdate program Dice Roller untuk memeriksa apakah dadu Anda telah mengeluarkan angka keberuntungan yang telah ditetapkan atau belum. Jika sudah, Anda menang!

Menyiapkan kode awal

Anda memulai Lucky Dice Roller dengan kode yang mirip dengan kode solusi program Kotlin Dice Roller sebelumnya. Anda dapat mengedit fungsi main() dalam kode sebelumnya agar cocok, atau Anda dapat menyalin dan menempelkan kode di bawah ini untuk memulai.

fun main() {
    val myFirstDice = Dice(6)
    val rollResult = myFirstDice.roll()
    println("Your ${myFirstDice.numSides} sided dice rolled ${rollResult}!")
}

class Dice (val numSides: Int) {

    fun roll(): Int {
        return (1..numSides).random()
    }
}

Memeriksa apakah angka keberuntungan telah dilempar

Buat angka keberuntungan terlebih dahulu, lalu bandingkan lemparan dadu dengan angka tersebut.

  1. Di main(), hapus pernyataan println().
  2. Di main(), tambahkan val bernama luckyNumber dan tetapkan ke 4. Kode akan terlihat seperti ini.
fun main() {
    val myFirstDice = Dice(6)
    val rollResult = myFirstDice.roll()
    val luckyNumber = 4
}
  1. Di bawah ini, tambahkan pernyataan if dengan kondisi di dalam tanda kurung () yang memeriksa apakah rollResult sama (==) dengan luckyNumber atau tidak. Sisakan ruang di antara kurung kurawal {} agar Anda dapat menambahkan lebih banyak kode.
fun main() {
    val myFirstDice = Dice(6)
    val rollResult = myFirstDice.roll()
    val luckyNumber = 4
    if (rollResult == luckyNumber) {

    }
}
  1. Di dalam tanda kurung kurawal {}, tambahkan pernyataan println untuk mencetak "You win!"
fun main() {
    val myFirstDice = Dice(6)
    val rollResult = myFirstDice.roll()
    val luckyNumber = 4

    if (rollResult == luckyNumber) {
        println("You win!")
    }
}
  1. Jalankan program Anda. Anda mungkin perlu menjalankannya beberapa kali sebelum beruntung dan melihat pesan kemenangan di output!
You win!

Merespons jika angka keberuntungan belum dilempar

Pengguna yang tidak menang akan bertanya-tanya apakah ada kerusakan pada program jika program tidak memberikan masukan. Sebaiknya selalu berikan respons saat pengguna melakukan sesuatu. Untuk program Lucky Dice Roller, Anda dapat memberi tahu bahwa mereka tidak menang menggunakan pernyataan else.

  1. Tambahkan pernyataan else untuk mencetak "You didn't win, try again!".
fun main() {
    val myFirstDice = Dice(6)
    val rollResult = myFirstDice.roll()
    val luckyNumber = 4

    if (rollResult == luckyNumber) {
        println("You win!")
    } else {
        println("You didn't win, try again!")
    }
}
  1. Jalankan program, dan apa pun hasilnya, selalu diberi tahu pengguna Anda.

Pada tahap ini, pengguna akan tahu apakah mereka menang atau tidak, tetapi bukan alasannya. Selalu berikan informasi kepada pengguna sehingga mereka dapat memahami hasil dari tindakan mereka! Bayangkan program Anda adalah suatu permohonan pinjaman. "Anda tidak disetujui karena peringkat kredit Anda buruk," jauh lebih informatif daripada, "Maaf, tidak ada pinjaman untuk Anda, coba lagi!" Untuk Lucky Dice Roller, Anda dapat memberikan pesan informatif yang berbeda kepada pengguna untuk setiap lemparan jika mereka kalah. Gunakan beberapa pernyataan else if untuk melakukannya.

  1. Tambahkan pernyataan else if untuk mencetak pesan yang berbeda untuk setiap lemparan. Jika perlu, lihat kembali format yang Anda pelajari di tugas sebelumnya.
fun main() {
    val myFirstDice = Dice(6)
    val rollResult = myFirstDice.roll()
    val luckyNumber = 4

    if (rollResult == luckyNumber) {
        println("You win!")
    } else if (rollResult == 1) {
        println("So sorry! You rolled a 1. Try again!")
    } else if (rollResult == 2) {
        println("Sadly, you rolled a 2. Try again!")
    } else if (rollResult == 3) {
        println("Unfortunately, you rolled a 3. Try again!")
    } else if (rollResult == 5) {
        println("Don't cry! You rolled a 5. Try again!")
    } else {
        println("Apologies! You rolled a 6. Try again!")
    }
}

Dalam kode di atas, Anda akan

  • Memeriksa apakah rollResult adalah luckyNumber.
  • Jika rollResult adalah luckyNumber, cetak pesan kemenangan.
  • Jika tidak, periksa apakah rollResult adalah 1, dan jika ya, cetak pesan coba lagi.
  • Jika tidak, periksa apakah rollResult adalah 2, dan jika ya, cetak pesan coba lagi yang berbeda.
  • Jika tidak, teruskan memeriksa hingga angka 5.
  • Jika angkanya bukanlah salah satu di antara 1 hingga 5, satu-satunya opsi yang tersisa adalah 6. Jadi, tidak perlu pengujian lainnya dengan else if, dan Anda hanya dapat menangkap opsi terakhir dengan pernyataan else akhir.

Karena memiliki beberapa kasus else if adalah hal yang sangat umum, maka Kotlin memiliki cara penulisan yang lebih sederhana.

4. Menggunakan pernyataan when (kapan)

Pengujian untuk berbagai hasil, atau kasus, sangat umum dalam pemrograman. Terkadang, daftar kemungkinan hasil bisa sangat panjang. Misalnya, jika Anda melemparkan dadu dengan 12 sisi, Anda memiliki 11 pernyataan else if antara hasil yang dianggap sukses hingga hasil else yang terakhir. Untuk membuat jenis pernyataan ini lebih mudah ditulis dan dibaca sehingga membantu menghindari error, Kotlin menyediakan pernyataan when.

Anda akan mengubah program agar dapat menggunakan pernyataan when. Pernyataan when dimulai dengan kata kunci when, diikuti dengan tanda kurung (). Tanda kurung berisi nilai yang akan diuji. Agar kode dapat berjalan untuk berbagai kondisi, nilai harus diikuti dengan tanda kurung kurawal {}.

  1. Dalam program Anda, di main(), pilih kode dari pernyataan if pertama hingga kurung kurawal } yang menutup pernyataan else terakhir dan hapus kode.
fun main() {
    val myFirstDice = Dice(6)
    val rollResult = myFirstDice.roll()
    val luckyNumber = 4
}
  1. Di main(), di bawah deklarasi luckyNumber, buat pernyataan when. Karena when Anda perlu menguji hasil yang dilempar, tempatkan rollResult di antara tanda kurung (). Tambahkan kurung kurawal {} dengan beberapa spasi tambahan, seperti yang ditunjukkan di bawah ini.
fun main() {
    val myFirstDice = Dice(6)
    val rollResult = myFirstDice.roll()
    val luckyNumber = 4

    when (rollResult) {

    }
}

Sama seperti sebelumnya, uji terlebih dahulu apakah rollResult sama dengan luckyNumber.

  1. Di dalam tanda kurung kurawal {} dari pernyataan when, tambahkan pernyataan yang menguji rollResult dengan membandingkannya ke luckyNumber, dan jika keduanya sama, cetak pesan kemenangan. Pernyataannya terlihat seperti ini:
luckyNumber -> println("You win!")

Ini artinya:

  • Pertama, masukkan nilai yang Anda bandingkan dengan rollResult. Nilai ini adalah luckyNumber.
  • Lanjutkan dengan sebuah panah (->).
  • Kemudian, tambahkan tindakan yang akan dilakukan jika ada kecocokan.

Baca ini sebagai, "Jika rollResult adalah luckyNumber, cetak pesan "You win!"".

Dan kode main() Anda akan terlihat seperti ini.

fun main() {
    val myFirstDice = Dice(6)
    val rollResult = myFirstDice.roll()
    val luckyNumber = 4

    when (rollResult) {
        luckyNumber -> println("You win!")
    }
}
  1. Gunakan pola yang sama untuk menambahkan baris dan pesan untuk kemungkinan lemparan 1 - 6 kecuali 4, seperti yang ditunjukkan di bawah. Fungsi main() yang sudah selesai akan terlihat seperti ini.
fun main() {
    val myFirstDice = Dice(6)
    val rollResult = myFirstDice.roll()
    val luckyNumber = 4

    when (rollResult) {
        luckyNumber -> println("You won!")
        1 -> println("So sorry! You rolled a 1. Try again!")
        2 -> println("Sadly, you rolled a 2. Try again!")
        3 -> println("Unfortunately, you rolled a 3. Try again!")
        5 -> println("Don't cry! You rolled a 5. Try again!")
        6 -> println("Apologies! You rolled a 6. Try again!")
    }
}
  1. Jalankan program Anda. Tidak ada perbedaan di output, tetapi kode Anda jauh lebih ringkas dan lebih mudah dibaca.

Selamat! Anda telah mempelajari dua cara untuk mencetak pesan, tergantung pada kondisi. Ini adalah alat yang canggih untuk menulis program yang menarik!

5. Kode solusi

fun main() {
    val myFirstDice = Dice(6)
    val rollResult = myFirstDice.roll()
    val luckyNumber = 4

    when (rollResult) {
        luckyNumber -> println("You won!")
        1 -> println("So sorry! You rolled a 1. Try again!")
        2 -> println("Sadly, you rolled a 2. Try again!")
        3 -> println("Unfortunately, you rolled a 3. Try again!")
        5 -> println("Don't cry! You rolled a 5. Try again!")
        6 -> println("Apologies! You rolled a 6. Try again!")
   }
}

class Dice(val numSides: Int) {
    fun roll(): Int {
        return (1..numSides).random()
    }
}

6. Ringkasan

  • Gunakan pernyataan if untuk menetapkan kondisi untuk mengeksekusi beberapa petunjuk. Misalnya, jika pengguna berhasil mendapatkan angka keberuntungan, cetak pesan kemenangan.
  • Jenis data Boolean memiliki nilai true dan false dan dapat digunakan untuk pengambilan keputusan.
  • Bandingkan nilai menggunakan operator seperti lebih besar dari (>), kurang dari (<), dan sama dengan (==).
  • Gunakan rantai pernyataan else if untuk menetapkan beberapa kondisi. Misalnya, cetak pesan yang berbeda untuk setiap kemungkinan lemparan dadu.
  • Gunakan pernyataan else di akhir rantai kondisi untuk menangkap kasus apa pun yang mungkin tidak dibahas secara eksplisit. Jika Anda mencakup kasus dadu 6 sisi, pernyataan else akan menangkap angka 7 dan 8 yang dilempar dengan dadu 8 sisi.
  • Gunakan pernyataan when sebagai bentuk ringkas kode eksekusi berdasarkan perbandingan nilai.

Bentuk umum if-else:

if (condition-is-true) {
    execute-this-code
} else if (condition-is-true) {
    execute-this-code
} else {
    execute-this-code
}

Pernyataan when:

when (variable) {
    matches-value -> execute-this-code
    matches-value -> execute-this-code
    ...
}

7. Mempelajari lebih lanjut

8. Berlatih sendiri

Lakukan hal berikut:

  1. Ubah myFirstDice untuk mendapatkan dadu 8 sisi dan menjalankan kode Anda. Apa yang terjadi?

Petunjuk: Saat Anda meningkatkan jumlah sisi, pernyataan when tidak lagi mencakup semua kasus. Jadi, untuk kasus yang tidak tercakup, tidak akan ada yang dicetak.

  1. Perbaiki pernyataan when untuk memperhitungkan kedelapan sisi. Anda dapat melakukannya dengan menambahkan kasus untuk angka tambahan. Tantangan: Alih-alih menambahkan kasus baru untuk setiap angka, gunakan pernyataan else untuk melihat semua kasus yang tidak tercakup secara eksplisit.

Petunjuk: Anda dapat menambahkan lebih banyak kasus untuk mencakup sisi lainnya. Ini merupakan suatu cara yang baik untuk melakukannya jika Anda menginginkan pesan yang berbeda untuk setiap angka yang dapat dilempar. Atau, Anda dapat menggunakan pernyataan else dan mencetak pesan yang sama untuk semua sisi yang lebih besar dari 6 yang dicakup oleh kode saat ini.

  1. Ubah myFirstDice agar hanya memiliki 4 sisi. Apa yang terjadi?

Petunjuk: Mengubah jumlah sisi dadu menjadi kurang dari yang dicakup oleh pernyataan when tidak akan memiliki efek nyata karena semua kasus yang dapat terjadi akan tercakup.