Membuat pesan ulang tahun dalam Kotlin

1. Pengantar

Dalam codelab ini, Anda akan membuat program Kotlin singkat untuk mencetak pesan ulang tahun dengan kue dan banner ulang tahun.

Prasyarat

Yang akan Anda pelajari

  • Cara mencetak teks yang lebih kompleks menggunakan program yang Anda buat.
  • Cara melakukan matematika dasar dalam Kotlin dan menyimpan hasilnya dalam variabel untuk digunakan di lain waktu.
  • Cara membuat fungsi untuk mencetak string yang sama beberapa kali.
  • Cara membuat loop yang mencetak cuplikan teks beberapa kali.

Yang akan Anda build

  • Anda akan membuat program singkat yang dapat digunakan untuk mencetak pesan ulang tahun, gambar kue berbasis teks, dan banner ulang tahun.

Yang Anda perlukan

  • Komputer dengan akses internet dan browser web modern, seperti Chrome versi terbaru.

2. Membuat pesan ulang tahun dalam Kotlin

Menyiapkan kode awal

  1. Di browser, buka https://developer.android.com/training/kotlinplayground. Link ini akan membuka alat pemrograman Kotlin berbasis browser.
  2. Dalam fungsi fun main(), ganti teks "Hello, world!" dengan "Happy Birthday, Rover!".
  3. Di bawahnya, masih dalam tanda kurung kurawal, tambahkan dua baris lagi yang akan dicetak: "You are already 5!" dan "5 is the very best age to celebrate!".

Kode yang sudah selesai akan terlihat seperti ini.

fun main() {
    println("Happy Birthday, Rover!")
    println("You are already 5!")
    println("5 is the very best age to celebrate!")
}
  1. Jalankan kode.
  2. Pastikan panel output menampilkan Happy Birthday, Rover! dan di bawahnya, You are already 5! dan 5 is the very best age to celebrate!
Happy Birthday, Rover!
You are already 5!
5 is the very best age to celebrate!

Menambahkan kue ulang tahun

Pesan ulang tahun memerlukan gambar bertema ulang tahun. Misalnya, kue. Anda dapat menambahkan kue ke pesan ulang tahun dengan mencetak baris tambahan yang menggunakan huruf serta simbol di keyboard dan println().

Lanjutkan dari kode solusi di atas.

  1. Dalam kode, antara dua pernyataan println() untuk Happy Birthday dan You are already 5, tambahkan baris pernyataan cetak berikut, sebagaimana ditunjukkan di bawah ini. Tindakan ini akan membuat kue. Pernyataan println() terakhir tidak memiliki teks di antara kedua tanda kutip, sehingga akan mencetak baris kosong.
    println("   ,,,,,   ")
    println("   |||||   ")
    println(" =========")
    println("@@@@@@@@@@@")
    println("{~@~@~@~@~}")
    println("@@@@@@@@@@@")
    println("")

Untuk membantu orang lain memahami kode ini, Anda dapat menambahkan komentar sebelum mencetak kue. Jika Anda menjalankan kode, output-nya tidak akan terlihat berbeda, karena komentar hanya informasi untuk Anda dan developer lainnya, bukan perintah untuk sistem. Komentar inline dimulai dengan // dan diikuti oleh teks, sebagaimana ditunjukkan di bawah ini.

// This is a comment line
// This is another comment
  1. Tambahkan komentar sebelum mencetak kue: // Let's print a cake!.
  2. Tambahkan komentar sebelum mencetak baris kosong: // This prints an empty line.

Kodenya akan terlihat seperti di bawah ini.

fun main() {
    println("Happy Birthday, Rover!")

    // Let's print a cake!
    println("   ,,,,,   ")
    println("   |||||   ")
    println(" =========")
    println("@@@@@@@@@@@")
    println("{~@~@~@~@~}")
    println("@@@@@@@@@@@")

    // This prints an empty line.
    println("")

    println("You are already 5!")
    println("5 is the very best age to celebrate!")
}
  1. Jalankan kode, dan output-nya akan terlihat seperti di bawah ini.
Happy Birthday, Rover!
   ,,,,,
   |||||
 =========
@@@@@@@@@@@
{~@~@~@~@~}
@@@@@@@@@@@

You are already 5!
5 is the very best age to celebrate!

3. Membuat dan menggunakan variabel

Menyimpan usia Rover dalam variabel

  1. Dalam kode yang sudah diselesaikan sejauh ini, perhatikan bahwa Anda menulis ulang angka usia yang sama dua kali.

Anda dapat menyimpan angka ini di satu tempat sebagai variabel, sehingga tidak perlu mengulangi penulisannya. Hal ini seperti memasukkan angka ke dalam kotak dan memberinya nama. Selanjutnya, nama variabel ini dapat digunakan kapan pun Anda membutuhkannya. Jika usianya berubah, Anda hanya perlu mengubah program di satu tempat. Dengan mengubah variabel, nilai untuk usia yang dicetak akan selalu benar di mana pun variabel digunakan.

  1. Dalam program, sebagai baris pertama kode dalam fungsi main(), tambahkan kode berikut untuk membuat variabel yang disebut age, dengan nilai 5, sebagaimana ditunjukkan di bawah ini. (Anda harus menempatkan baris ini sebelum pernyataan println()).
val age = 5

Baris ini berarti:

  • val adalah kata khusus yang disebut kata kunci dalam Kotlin. Kata ini menunjukkan bahwa kata setelahnya merupakan nama variabel.
  • age adalah nama variabel.
  • = membuat nilai age (di sebelah kiri) sama dengan nilai di sebelah kanan. Dalam matematika, satu tanda sama dengan digunakan untuk menyatakan bahwa nilai di setiap sisi sama. Dalam Kotlin, tidak seperti dalam matematika, satu tanda sama dengan digunakan untuk menetapkan nilai di sebelah kanan ke variabel bernama di sebelah kiri.

Developer biasanya memahaminya seperti ini: Baris ini mendeklarasikan variabel bernama age yang nilainya ditetapkan ke 5.

Untuk menggunakan variabel dalam pernyataan cetak, Anda harus mengapitnya dengan beberapa simbol yang memberi tahu sistem bahwa yang berikutnya bukan teks, tetapi variabel. Sistem harus mencetak nilai variabel, bukan mencetak teks. Lakukan dengan memasukkan variabel ke dalam kurung kurawal yang diawali dengan tanda dolar, seperti dalam contoh di bawah ini.

${variable}
  1. Dalam kode, ganti angka 5 di kedua pernyataan cetak dengan variabel age sebagaimana ditunjukkan di bawah ini.
println("You are already ${age}!")
println("${age} is the very best age to celebrate!")
  1. Jalankan kode dan kedua pesan akan menampilkan usia yang sama.
  2. Ubah nilai variabel menjadi sesuatu yang berbeda. Misalnya, Anda dapat menampilkan usia Rover dalam hitungan hari, bukan tahun. Untuk melakukannya, kalikan usia dengan 365, tanpa tahun kabisat. Anda dapat melakukan penghitungan ini tepat saat membuat variabel, sebagaimana ditunjukkan di bawah ini.
val age = 5 * 365
  1. Jalankan kembali kodenya, dan perhatikan bahwa kedua pesan kini menampilkan usia dalam hari.
Happy Birthday, Rover!
   ,,,,,
   |||||
 =========
@@@@@@@@@@@
{~@~@~@~@~}
@@@@@@@@@@@

You are already 1825!
1825 is the very best age to celebrate!
  1. [Opsional] Ubah teks pesan cetak agar hitungan hari lebih mudah dimengerti. Misalnya, ubah agar kalimatnya berbunyi:
You are already 1825 days old!
1825 days old is the very best age to celebrate!

Memasukkan teks ke dalam variabel

Anda tidak hanya dapat memasukkan angka ke dalam variabel, tetapi juga teks.

  1. Di bawah variabel untuk age, tambahkan variabel yang disebut name untuk nama orang yang berulang tahun, lalu tetapkan nilainya ke "Rover".
val name = "Rover"
  1. Ganti nama Rover dalam pesan ulang tahun dengan variabel, sebagaimana ditunjukkan di bawah ini.
println("Happy Birthday, ${name}!")

Anda dapat memiliki lebih dari satu variabel dalam pernyataan cetak.

  1. Tambahkan Rover ke pesan usia, menggunakan variabel name, sebagaimana ditunjukkan di bawah ini.
println("You are already ${age} days old, ${name}!")

Kode yang sudah selesai akan terlihat seperti ini.

fun main() {

    val age = 5 * 365
    val name = "Rover"

    println("Happy Birthday, ${name}!")

    // Let's print a cake!
    println("   ,,,,,   ")
    println("   |||||   ")
    println(" =========")
    println("@@@@@@@@@@@")
    println("{~@~@~@~@~}")
    println("@@@@@@@@@@@")

    // This prints an empty line.
    println("")

    println("You are already ${age} days old, ${name}!")
    println("${age} days old is the very best age to celebrate!")
}

Selamat! Kini Anda dapat membuat pesan dengan teks, grafik yang dibuat dari simbol, menggunakan variabel untuk menyimpan angka dan teks, serta mencetak teks menggunakan variabel.

4. Mencetak banner ulang tahun yang memiliki batas

Dalam tugas ini, Anda akan membuat banner ulang tahun, lalu mempelajari cara menyederhanakan kode tersebut menggunakan teknik untuk mengulangi dan menggunakan kembali kode, serta mengetahui alasan teknik tersebut berguna.

Membuat banner ulang tahun sederhana

  1. Di https://developer.android.com/training/kotlinplayground, tempatkan kursor dalam kode.
  2. Klik kanan untuk membuka menu, lalu pilih Select All.
  3. Tekan tombol backspace atau delete untuk menghapus semua kode.
  4. Salin dan tempel kode di bawah ini ke dalam editor.
fun main() {
    println("=======================")
    println("Happy Birthday, Jhansi!")
    println("=======================")
}
  1. Jalankan program untuk melihat banner yang dicetak di Console.
=======================
Happy Birthday, Jhansi!
=======================

Membuat fungsi untuk mencetak batas

Kode yang baru saja ditempel dan dijalankan adalah fungsi yang disebut main(), yang berisi tiga pernyataan cetak. Saat Anda menekan tombol Run, sistem akan menjalankan fungsi dan semua kode di dalamnya.

Program Kotlin harus selalu memiliki fungsi main(). Selain itu, Anda dapat membuat dan menggunakan fungsi milik sendiri. Sama seperti variabel yang membantu menghindari duplikasi pekerjaan, fungsi dapat membantu Anda menghindari penulisan kode yang sama beberapa kali. Dalam kode, pernyataan cetak untuk bagian atas dan bawah banner sama persis. Mari kita buat dan gunakan fungsi untuk mencetak batas tersebut.

  1. Dalam editor, di bawah fungsi main(), sisipkan baris kosong agar ada ruang untuk menulis. Sistem akan mengabaikan baris kosong, dan Anda dapat menyisipkannya di mana pun untuk membantu mengatur kode.
  2. Buat sebuah fungsi. Mulai dengan kata kunci fun, diikuti dengan nama, printBorder, sepasang tanda kurung (), dan sepasang tanda kurung kurawal {}, sebagaimana ditunjukkan di bawah ini.
fun printBorder() {}

Terkait fungsi penamaan.

  • Perhatikan bahwa nama fungsi printBorder dimulai dengan huruf kecil dan kata kerja. Nama fungsi hampir selalu dimulai dengan huruf kecil, kata kerja, dan nama yang harus menjelaskan hal yang dilakukan fungsi. Seperti: print() atau di sini, printBorder().
  • Perhatikan juga bahwa kata kedua dalam nama diawali dengan huruf besar. Gaya ini disebut "camel case", dan memudahkan nama untuk dibaca. Beberapa contoh nama lainnya adalah drawReallyCoolFancyBorder dan printBirthdayMessage.
  1. Letakkan tanda kurung kurawal } fungsi printBorder pada baris baru dan tambahkan baris kosong di antara dua kurung kurawal, agar ada ruang untuk menambahkan lebih banyak kode. Penggunaan tanda kurung tutup kurawal } pada baris tersendiri memudahkan Anda mengetahui tempat berakhirnya fungsi.
  2. Dalam fungsi main(), salin pernyataan cetak untuk batas, lalu tempelkan di antara tanda kurung kurawal fungsi printBorder().

Fungsi printBorder() yang sudah selesai akan terlihat seperti ini.

fun printBorder() {
    println("=======================")
}

Untuk menggunakan atau memanggil fungsi, gunakan namanya dengan tanda kurung. Perhatikan bahwa ini adalah cara menggunakan println(). Jadi, untuk menggunakan fungsi printBorder, panggil printBorder() di mana pun yang Anda perlukan dalam kode.

  1. Dalam fungsi main(), ganti baris kode yang mencetak garis batas menggunakan println() dengan panggilan ke fungsi printBorder(). Kode yang sudah selesai akan terlihat seperti ini.
fun main() {
    printBorder()
    println("Happy Birthday, Jhansi!")
    printBorder()
}

fun printBorder() {
    println("=======================")
}
  1. Jalankan kode untuk memastikan semua berfungsi seperti sebelumnya.

Perlu diketahui bahwa mengubah kode untuk membuatnya lebih baik atau lebih mudah digunakan tanpa mengubah output disebut "pemfaktoran ulang".

Mengulang pola batas

Garis batas merupakan simbol sama yang digunakan berulang kali. Jadi, alih-alih mengatakan:

"Cetak string berisi 23 simbol ini"

Anda dapat mengatakan,

"Cetak 1 simbol ini 23 kali".

Dalam kode, lakukan hal ini menggunakan pernyataan repeat().

  1. Dalam fungsi printBorder(), gunakan pernyataan repeat() untuk mencetak tanda sama dengan sebanyak 23 kali.
  2. Gunakan print(), bukan println(), agar Anda tidak melompat ke baris baru setelah mencetak setiap "=".

Berikut kodenya. Kini Anda memiliki satu petunjuk untuk mencetak tanda sama dengan, dan untuk mengulangi petunjuk tersebut sebanyak 23 kali, gunakan pernyataan repeat().

fun printBorder() {
    repeat(23) {
        print("=")
    }
}
  • Pernyataan repeat() dimulai dengan kata repeat, diikuti dengan (). Pernyataan seperti ini disebut sebagai 'loop' karena Anda mengulang kode yang sama beberapa kali. Anda akan mempelajari cara lain untuk membuat loop nanti.
  • Dalam tanda kurung () adalah jumlah pengulangan,
  • diikuti oleh tanda kurung kurawal {},
  • dalam kurung kurawal {}, adalah kode yang akan diulangi.
  1. Dalam fungsi printBorder(), setelah kurung tutup kurawal } pernyataan repeat(), tambahkan pernyataan println() untuk mencetak baris baru setelah selesai mencetak garis batas.

Sekarang kode akan menjadi seperti ini.

fun printBorder() {
    repeat(23) {
        print("=")
    }
    println()
}

Kode dalam fungsi main() tidak berubah, dan seluruh program akan terlihat seperti ini.

fun main() {
    printBorder()
    println("Happy Birthday, Jhansi!")
    printBorder()
}

fun printBorder() {
    repeat(23) {
        print("=")
    }
    println()
}
  1. Jalankan kode. Output harus sama seperti sebelumnya, tetapi kali ini, Anda dapat membuat batas dengan hanya sekali menetapkan simbol "=".
=======================
Happy Birthday, Jhansi!
=======================

Menggunakan argumen untuk mengubah batas

Bagaimana jika Anda ingin membuat batas yang menggunakan simbol berbeda, seperti di bawah ini?

%%%%%%%%%%%%%%%%%%%%%%%

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Anda dapat menentukan fungsi terpisah untuk masing-masing simbol berbeda tersebut. Namun, ada cara yang lebih efisien untuk melakukannya. Anda dapat menggunakan kembali fungsi yang sudah ditulis dan membuatnya lebih fleksibel, sehingga berfungsi untuk berbagai jenis simbol.

Hal yang menarik dari fungsi adalah Anda dapat memberikan input menggunakan argumen. Anda menemukannya secara singkat dalam codelab sebelumnya, saat dikenalkan dengan main(). Pada langkah ini, Anda akan menambahkan argumen ke dalam fungsi printBorder(), sehingga argumen tersebut dapat mencetak pola batas yang diberikan.

  1. Pada main(), di bagian atas, buat variabel yang disebut border untuk pola batas. Ini akan menyimpan teks yang akan diulang untuk batas.
val border = "%"
  1. Sekarang, masukkan variabel border tersebut ke dalam kedua panggilan ke fungsi printBorder() sebagai argumen. Lakukan dengan menempatkan border dalam tanda kurung (), sama seperti saat Anda menyediakan teks untuk println() yang akan dicetak.

Fungsi main() akan terlihat seperti kode di bawah ini.

fun main() {
    val border = "%"
    printBorder(border)
    println("Happy Birthday, Jhansi!")
    printBorder(border)
}

Fungsi printBorder() akan mengambil nilai border ini sebagai input dan mencari tahu cara mencetak batas penuh.

  1. Jalankan kode. Kode tidak dapat dieksekusi, dan Anda melihat ikon error di samping kode. dd0286b7414cea42.png
  2. Lihat panel output, dan ada pesan error.

Seperti sebelumnya, pesan tersebut menunjukkan lokasi error, dan memberi Anda petunjuk tentang error tersebut. Bagian yang penting adalah: Too many arguments for public fun printBorder(). Anda memanggil fungsi printBorder() dan memasukkan batas sebagai input. Namun, definisi fungsi printBorder() saat ini tidak menerima input apa pun.

  1. Perbaiki error ini dengan menambahkan argumen untuk batas ke definisi fungsi printBorder(). Lihat baris pertama kode sebagaimana ditunjukkan di bawah ini.
fun printBorder(border: String) {
    repeat(23) {
        print("=")
    }
    println()
}
  • Perhatikan bahwa nama argumennya adalah border.
  • Nama diikuti dengan titik dua :
  • dan kata String, yang merupakan deskripsi jenis atau tipe argumen ini.

String adalah potongan teks yang terdiri atas karakter yang diapit tanda kutip. Anda dapat menganggapnya sebagai manik-manik yang dijajarkan pada tali untuk membuat kalung, seperti karakter yang dijajarkan untuk membentuk kata dan teks. Menetapkan bahwa argumen harus berupa String membantu sistem menentukan bahwa argumen adalah teks, dan bukan, misalnya, angka.

  1. Jalankan kode. Fungsi printBorder() kini menerima String batas sebagai input. Kode dalam main() akan memanggil printBorder(border) dengan border sebagai argumen. Kode akan berjalan tanpa error.
  2. Lihat output program di Console, apakah batas yang ditampilkan masih sama seperti sebelumnya?
=======================
Happy Birthday, Jhansi!
=======================

Ini bukan perilaku yang dimaksudkan. Anda mencoba membuat batas dengan simbol "%", tetapi program masih mencetak batas dengan simbol "=". Pada langkah berikutnya, Anda akan menyelidiki alasan hal ini terjadi.

  1. Dalam editor, perhatikan tanda seru berwarna abu-abu. Ikon ini menunjukkan peringatan. Peringatan berisi masalah terkait kode yang perlu diperhatikan, tetapi kode tetap dapat dijalankan meskipun ada peringatan. 7579663a694ef6bd.png
  2. Arahkan kursor ke tanda seru, dan pesan akan muncul. Pesannya berbunyi "Parameter 'border' is never used." Peringatan ini menjelaskan masalah yang terjadi pada output. Anda memasukkan string baru untuk batas ke dalam fungsi, tetapi tidak menggunakannya untuk mencetak.
  3. Ubah fungsi printBorder() untuk menggunakan border yang dimasukkan, bukan mencetak "=". Ini berfungsi sama persis seperti jika border adalah variabel yang ditetapkan dalam fungsi.
fun printBorder(border: String) {
    repeat(23) {
        print(border)
    }
    println()
}
  1. Jalankan lagi kode. Output-nya akan terlihat seperti di bawah ini.
%%%%%%%%%%%%%%%%%%%%%%%
Happy Birthday, Jhansi!
%%%%%%%%%%%%%%%%%%%%%%%

Bagus, Anda sudah mengatasi masalahnya. Berikut adalah kode yang sudah selesai.

fun main() {
    val border = "%"
    printBorder(border)
    println("Happy Birthday, Jhansi!")
    printBorder(border)
}

fun printBorder(border: String) {
    repeat(23) {
        print(border)
    }
    println()
}

Anda membuat fungsi printBorder() jauh lebih fleksibel, tanpa menambahkan lebih banyak kode. Kini Anda dapat mencetak batas simbol berbeda hanya dengan perubahan kecil.

  1. [Opsional] Dengan hanya mengubah satu baris kode dalam fungsi main(), bagaimana Anda akan mencetak banner ulang tahun seperti ini?
***********************
Happy Birthday, Jhansi!
***********************
:::::::::::::::::::::::
Happy Birthday, Jhansi!
:::::::::::::::::::::::

Memodifikasi fungsi agar memiliki dua argumen

Bagaimana jika Anda ingin menggunakan pola lain yang lebih panjang dari 1 karakter, misalnya "'-._,-'". Anda tidak akan mengulangi pola ini 23 kali karena akan menjadi terlalu panjang. Anda dapat mengulanginya 4 kali. Untuk melakukannya, Anda dapat mengubah jumlah pengulangan dalam pernyataan repeat() printBorder(). Namun, Anda dapat melakukan hal yang lebih baik.

Anda dapat menentukan batas yang lebih menarik berdasarkan dua hal:

  • Pola yang akan diulang (yang telah diselesaikan)
  • Berapa kali pola ingin diulang

Anda dapat membuat variabel untuk setiap pola dan jumlah pengulangan, lalu memasukkan kedua informasi tersebut ke dalam fungsi printBorder().

  1. Di main(), ubah batas menjadi pola "'-._,-'".
val border = "`-._,-'"
  1. Jalankan kode, lalu perhatikan bahwa pola tersebut kini terlalu panjang.
  2. Di main(), di bawah definisi border, buat variabel baru bernama timesToRepeat untuk jumlah pengulangan. Tetapkan nilainya ke 4.
val timesToRepeat = 4
  1. Di main(), saat memanggil printBorder(), tambahkan jumlah pengulangan sebagai argumen kedua. Pisahkan kedua argumen dengan koma.
printBorder(border, timesToRepeat)

Fungsi main() kini akan terihat seperti ini:

fun main() {
    val border = "`-._,-'"
    val timesToRepeat = 4
    printBorder(border, timesToRepeat)
    println("Happy Birthday, Jhansi!")
    printBorder(border, timesToRepeat)
}

Seperti sebelumnya, kode ini memberikan error karena Anda memiliki lebih banyak argumen yang memanggil printBorder() daripada dalam definisi printBorder().

  1. Perbaiki printBorder() agar menerima jumlah pengulangan sebagai input. Tambahkan koma setelah argumen, diikuti dengan argumen tambahan: timesToRepeat: Int. Baris pertama definisi fungsi sekarang terlihat seperti di bawah ini.
fun printBorder(border: String, timesToRepeat: Int) {

Pemberitahuan:

  • Koma memisahkan dua argumen.
  • timesToRepeat adalah nama argumen,
  • diikuti dengan simbol titik dua :,
  • dan jenis: Int. timesToRepeat merupakan angka, jadi Anda harus membuatnya berupa jenis Int, yakni singkatan dari integer, bilangan bulat, bukan jenis String.
  1. Dalam printBorder(), ubah repeat untuk menggunakan argumen timesToRepeat (bukan angka 23). Kode printBorder() akan terlihat seperti ini.
fun printBorder(border: String, timesToRepeat: Int) {
    repeat(timesToRepeat) {
        print(border)
    }
    println()
}
  1. Jalankan kode. Output-nya terlihat seperti di bawah ini.
`-._,-'`-._,-'`-._,-'`-._,-'
Happy Birthday, Jhansi!
`-._,-'`-._,-'`-._,-'`-._,-'
  1. Untuk menyempurnakan output ini, masukkan dua spasi di awal pesan Selamat Ulang Tahun. Maka output-nya akan ditampilkan sebagaimana ditunjukkan di bawah ini.
`-._,-'`-._,-'`-._,-'`-._,-'
  Happy Birthday, Jhansi!
`-._,-'`-._,-'`-._,-'`-._,-'

Berikut adalah kode final untuk banner:

fun main() {
    val border = "`-._,-'"
    val timesToRepeat = 4
    printBorder(border, timesToRepeat)
    println("  Happy Birthday, Jhansi!")
    printBorder(border, timesToRepeat)
}

fun printBorder(border: String, timesToRepeat: Int) {
    repeat(timesToRepeat) {
        print(border)
    }
    println()
}

Selamat! Dengan fungsi, argumen, variabel, dan loop berulang, Anda telah mempelajari elemen penyusun dasar yang digunakan dalam hampir semua program.

Istirahat, lalu selesaikan tugas baru di bawah ini. Anda akan membuat lebih banyak fungsi dan loop, serta mendapatkan kekuatan untuk membuat kue raksasa dengan jumlah lilin yang tepat hanya menggunakan beberapa baris pemrograman.

5. Membuat kue dengan lapisan dan lilin

Dalam tugas ini, Anda akan meng-upgrade kode kue ulang tahun ke ukuran yang tepat dengan jumlah lilin yang sesuai untuk segala usia.

  • Anda akan membuat total tiga fungsi untuk menggambar kue berlapis yang dilengkapi lilin.
  • Anda akan menggunakan repeat() dalam repeat() lainnya, sehingga membuat hal yang disebut "loop yang disarangkan".
  • Cara membuat kode ini adalah cara membuat program apa pun, dimulai dengan gambaran besar dan menambahkan detail. Ini disebut "pengembangan dari atas ke bawah".
  • Petunjuk untuk praktik ini tidak terlalu mendetail, dan Anda dapat melihat kode yang sudah selesai jika mengalami kesulitan.

Berikut adalah gambar kue yang akan dibuat:

 ,,,,,,,,,,,,,,,,,,,,,,,,
 ||||||||||||||||||||||||
==========================
@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@

Berikut adalah petunjuknya.

Membuat fungsi main()

  1. Reset kode dalam editor ke program Hello, world!.
  2. Anda dapat menghapus argumen untuk main(), karena tidak akan digunakan.
  3. Di main(), buat variabel age dan tetapkan ke 24.
  4. Di main(), buat variabel kedua layers dan tetapkan ke 5.
  5. Di main(), panggil fungsi printCakeCandles() dan masukkan age. Tindakan ini akan menyebabkan error karena Anda belum membuat fungsi tersebut.
  6. Dengan cara yang sama, panggil fungsi printCakeTop() dan juga masukkan age.
  7. Terakhir, panggil fungsi printCakeBottom() dan masukkan age, serta jumlah layers.
  8. Untuk mengatasi error, beri komentar pada ketiga panggilan fungsi dengan menambahkan // di awal setiap baris, sebagaimana ditunjukkan di bawah ini. Teknik ini memungkinkan Anda membuat draf kode tanpa memicu error.
  9. Jalankan program, dan program seharusnya tidak memiliki error dan tidak melakukan apa-apa.

Fungsi main() akan terlihat seperti kode di bawah ini.

fun main() {
    val age = 24
    val layers = 5
    // printCakeCandles(age)
    // printCakeTop(age)
    // printCakeBottom(age, layers)
}

Membuat printCakeTop()

Fungsi printCakeTop() untuk mencetak bagian atas kue, garis tanda sama dengan, hampir sama dengan fungsi printBorder() yang dibuat sebelumnya dalam codelab ini.

==========================
  1. Di bawah fungsi main(), tambahkan baris kosong, lalu buat fungsi, printCakeTop(), yang mengambil satu argumen, age, berjenis Int.
  2. Di dalamnya, gunakan pernyataan repeat() untuk mencetak satu tanda sama dengan sebanyak age kali ditambah 2. Dua tanda sama dengan tambahan digunakan agar lilin tidak jatuh dari sisi kue.
  3. Di akhir, saat repeat() selesai, cetak baris kosong.
  4. Di main(), hapus dua simbol // dari awal baris kode untuk printCakeTop(), karena fungsi tersebut kini sudah ada.
printCakeTop(age)

Berikut adalah fungsi yang sudah selesai.

fun printCakeTop(age: Int) {
    repeat(age + 2) {
        print("=")
    }
    println()
}
  1. Jalankan kode untuk melihat bagian atas kue.

Membuat printCakeCandles()

Setiap lilin terdiri atas dua simbol: koma (,) untuk api, dan garis vertikal (|) untuk badan lilin.

,,,,,,,,,,,,,,,,,,,,,,,,

||||||||||||||||||||||||

Untuk melakukannya dalam satu fungsi, masukkan dua pernyataan repeat() ke dalam fungsi, satu untuk api dan satu untuk badan lilin.

  1. Di bawah fungsi main() dan fungsi printCakeTop(), buat fungsi baru, printCakeCandles(), yang mengambil satu argumen, age, jenis Int.
  2. Di dalamnya, gunakan pernyataan repeat() untuk mencetak satu koma , untuk api.
  3. Ulangi ini sebanyak age kali.
  4. Di akhir, cetak baris kosong.
  5. Tambahkan pernyataan cetak guna mencetak satu ruang untuk menyisipkan lilin.
  6. Di bawah ini, ulangi langkah-langkah membuat pernyataan repeat() kedua untuk mencetak badan lilin dengan garis vertikal |.
  7. Di akhir, cetak baris baru menggunakan println().
  8. Di main(), hapus dua simbol // dari awal baris kode untuk printCakeCandles().
printCakeCandles(age)
  1. Jalankan kode untuk melihat bagian atas kue dan lilin.

Solusi:

fun printCakeCandles(age: Int) {
    print(" ")
    repeat(age) {
        print(",")
    }
    println() // Print an empty line

    print(" ") // Print the inset of the candles on the cake
    repeat(age) {
        print("|")
    }
    println()
}

Membuat printCakeBottom()

Dalam fungsi ini, Anda menggambar bagian bawah kue yang selebar age + 2 dan setinggi jumlah lapisan.

@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@
  • Artinya, fungsi memerlukan dua argumen, satu untuk lebar (age) dan satu untuk tinggi (layers).
  • Untuk mencetak bagian bawah kue, pertama-tama Anda harus mengulangi simbol 'at' @ sebanyak age + 2 kali untuk mencetak satu lapisan. Kemudian, Anda dapat mencetak satu lapisan sebanyak layers kali.

Menggambar simbol at sebanyak age+2 kali untuk membuat lapisan

  1. Di bawah fungsi yang ada, buat fungsi printCakeBottom() dengan dua argumen, age dan layers, keduanya jenis Int.
  2. Dalam fungsi, gunakan pernyataan repeat() untuk mencetak satu lapisan simbol 'at' @ sebanyak age + 2 kali. Selesaikan dengan mencetak baris kosong, sebagaimana ditunjukkan di bawah ini.
fun printCakeBottom(age: Int, layers: Int) {
    repeat(age + 2) {
        print("@")
    }
    println()
}
  1. Di main(), hapus dua simbol // dari awal baris kode untuk printCakeBottom(age, layers).
  2. Jalankan kode untuk memastikan bahwa kode tersebut mencetak satu baris bagian bawah kue.
 ,,,,,,,,,,,,,,,,,,,,,,,,
 ||||||||||||||||||||||||
==========================
@@@@@@@@@@@@@@@@@@@@@@@@@@

Pernyataan repeat() yang disarangkan

Untuk mencetak beberapa lapisan dasar kue yang identik, Anda dapat mengatakan:

Untuk lapisan 1, ulangi simbol sebanyak 12 kali: @@@@@@@@@@@@

Untuk lapisan 2, ulangi simbol sebanyak 12 kali: @@@@@@@@@@@@

Untuk lapisan 3, ulangi simbol sebanyak 12 kali: @@@@@@@@@@@@

Anda juga dapat mengatakannya secara lebih singkat sebagai:

Ulangi untuk tiga lapisan:

Ulangi simbol sebanyak 12 kali.

@@@@@@@@@@@@

@@@@@@@@@@@@

@@@@@@@@@@@@

Ini adalah cara mudah yang dapat dilakukan dengan pernyataan repeat(). Anda dapat menempatkan satu pernyataan repeat() dalam pernyataan repeat() lainnya. Jadi, Anda dapat membuat pernyataan repeat() dalam pernyataan repeat() guna mencetak simbol beberapa kali untuk sejumlah lapisan tertentu.

Menggunakan repeat() bertingkat untuk mencetak lapisan kue

  1. Tempatkan pernyataan repeat() kedua di sekitar semua kode dalam fungsi. Ulangi loop ini sebanyak layers kali.
  2. Di main(), hapus hanya dua // dari baris kode untuk printCakeBottom().
printCakeBottom(age, layers)
  1. Jalankan kode untuk melihat seluruh kue.

Solusi untuk printCakeBottom().

fun printCakeBottom(age: Int, layers: Int) {
    repeat(layers) {
        repeat(age + 2) {
            print("@")
        }
        println()
    }
}

Selamat! Anda baru saja menyelesaikan program yang cukup rumit dengan beberapa fungsi dan pernyataan repeat yang disarangkan. Kue Anda juga akan selalu memiliki jumlah lilin yang tepat.

Output akhir program akan menjadi:

 ,,,,,,,,,,,,,,,,,,,,,,,,
 ||||||||||||||||||||||||
==========================
@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@

6. Kode solusi

fun main() {
    val age = 24
    val layers = 5
    printCakeCandles(age)
    printCakeTop(age)
    printCakeBottom(age, layers)
}

fun printCakeCandles(age: Int) {
    print (" ")
    repeat(age) {
          print(",")
    }
    println() // Print an empty line

    print(" ") // Print the inset of the candles on the cake
    repeat(age) {
        print("|")
    }
    println()
}

fun printCakeTop(age: Int) {
    repeat(age + 2) {
        print("=")
    }
    println()
}

fun printCakeBottom(age: Int, layers: Int) {
    repeat(layers) {
        repeat(age + 2) {
            print("@")
        }
        println()
    }
}

7. Pemecahan masalah

Jika alat pemrograman Kotlin berbasis browser tidak mengeksekusi kode atau memberikan error tidak terduga yang tidak terkait dengan kode, Anda dapat mencoba hal berikut:

  • Muat ulang halaman menggunakan Shift+Reload.
  • Tunggu sebentar, lalu coba lagi.

8. Ringkasan

  • Gunakan ${} untuk mengapit variabel dan penghitungan dalam teks pernyataan cetak. Misalnya: ${age} dengan age sebagai variabel.
  • Buat variabel menggunakan kata kunci dan nama val. Setelah ditetapkan, nilai ini tidak dapat diubah. Tetapkan nilai ke variabel menggunakan tanda sama dengan. Contoh nilai adalah teks dan angka.
  • String adalah teks yang diapit tanda kutip, seperti "Hello".
  • Int adalah bilangan bulat positif atau negatif, seperti 0, 23, atau -1024.
  • Anda dapat memasukkan satu atau beberapa argumen ke dalam fungsi untuk digunakan oleh fungsi, misalnya: fun printCakeBottom(age:Int, layers:Int) {}
  • Gunakan pernyataan repeat() {} untuk mengulangi serangkaian petunjuk beberapa kali. Misalnya: repeat (23) { print("%") } atau repeat (layers) { print("@@@@@@@@@@") }.
  • Loop adalah petunjuk untuk mengulangi petunjuk beberapa kali. Pernyataan repeat() adalah contoh loop.
  • Anda dapat membuat loop yang disarangkan, yakni menempatkan loop dalam loop. Misalnya, Anda dapat membuat pernyataan repeat() dalam pernyataan repeat() guna mencetak simbol beberapa kali untuk sejumlah baris, seperti yang dilakukan untuk lapisan kue.

Ringkasan penggunaan argumen fungsi: Untuk menggunakan argumen dengan fungsi, Anda harus melakukan tiga hal:

  • Menambahkan argumen dan jenis ke definisi fungsi: printBorder(border: String)
  • Menggunakan argumen dalam fungsi: println(border)
  • Memberikan argumen saat memanggil fungsi: printBorder(border)

9. Pelajari lebih lanjut

Berikut adalah dokumentasi resmi untuk konsep Kotlin yang dipelajari dalam codelab ini.