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
- Cara membuka, mengedit, dan menjalankan kode di https://developer.android.com/training/kotlinplayground
- Kemampuan untuk membuat dan menjalankan program Kotlin yang menggunakan variabel, fungsi dengan argumen, class dengan metode, serta mencetak hasil ke konsol.
Yang akan Anda pelajari
- Cara menggunakan pernyataan
if
danelse
. - 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 nilaitrue
danfalse
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
- 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")
}
}
- 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:
- Buat variabel
num
dan tetapkan ke5.
- Jika
num
lebih besar dari 4, cetak"The variable is greater than 4"
. - 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 bersifattrue
ataufalse
. 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 kondisinyatrue
.
if (condition-is-true) { execute-this-code }
Menggunakan pernyataan if
untuk menyiapkan kondisi yang tidak terpenuhi
- 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")
}
}
- 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
.
- Tambahkan pernyataan
else
untuk mencetak pesan jikanum
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")
}
}
- Salin dan tempel kode di editor program Kotlin dan jalankan program untuk mengamati output-nya.
The variable is less than 4
- Perhatikan bahwa saat
num
memiliki nilai 3, program akan mencetak pesan "The variable is less than 4
" yang terkait dengan pernyataanelse
karenanum
tidak lebih besar dari 4. - Ubah
num
ke 5 dan jalankan programnya lagi. Sekarang benar bahwanum
lebih besar dari 4 dan program mencetak "The variable is greater than 4
". - 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
danelse
yang asli adalah pernyataanelse if
baru untuk kasus jikanum
adalah 4.
- Salin dan tempel kode di atas dalam editor program Kotlin dan jalankan program untuk mengamati output-nya.
The variable is equal to 4
- Lakukan eksperimen dengan mengubah nilai
num
, dan lihat pengaruhnya terhadap output. Ubahnum
ke 2 dan 6 sehingga Anda dapat melihat setiap kondisinya menjaditrue
.
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.
- Di
main()
, hapus pernyataanprintln()
. - Di
main()
, tambahkanval
bernamaluckyNumber
dan tetapkan ke 4. Kode akan terlihat seperti ini.
fun main() {
val myFirstDice = Dice(6)
val rollResult = myFirstDice.roll()
val luckyNumber = 4
}
- Di bawah ini, tambahkan pernyataan
if
dengan kondisi di dalam tanda kurung()
yang memeriksa apakahrollResult
sama (==
) denganluckyNumber
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) {
}
}
- Di dalam tanda kurung kurawal
{}
, tambahkan pernyataanprintln
untuk mencetak"You win!"
fun main() {
val myFirstDice = Dice(6)
val rollResult = myFirstDice.roll()
val luckyNumber = 4
if (rollResult == luckyNumber) {
println("You win!")
}
}
- 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
.
- 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!")
}
}
- 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.
- 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
adalahluckyNumber
. - Jika
rollResult
adalahluckyNumber
, 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 pernyataanelse
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 {}
.
- Dalam program Anda, di
main()
, pilih kode dari pernyataanif
pertama hingga kurung kurawal}
yang menutup pernyataanelse
terakhir dan hapus kode.
fun main() {
val myFirstDice = Dice(6)
val rollResult = myFirstDice.roll()
val luckyNumber = 4
}
- Di
main()
, di bawah deklarasiluckyNumber
, buat pernyataanwhen
. Karenawhen
Anda perlu menguji hasil yang dilempar, tempatkanrollResult
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
.
- Di dalam tanda kurung kurawal
{}
dari pernyataanwhen
, tambahkan pernyataan yang mengujirollResult
dengan membandingkannya keluckyNumber
, 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 adalahluckyNumber
. - 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!")
}
}
- 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!")
}
}
- 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 nilaitrue
danfalse
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, pernyataanelse
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:
- 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.
- 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 pernyataanelse
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.
- 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.