07. Hello, World — Solusi PR

Coba setiap soal sendiri dulu. PR ini tentang prosesnya, bukan jawaban akhirnya. Kalau suatu soal tidak mau jalan, baca bagian Cara memikirkannya dan coba lagi sebelum melihat solusi yang sudah dikerjakan.

File solusi .lua ada di exercises/07/homework/solutions/. Penjelasan di bawah menerangkan kenapa setiap solusi ditulis seperti itu.

Soal 1 — Sapa dirimu sendiri

Soal. Cetak sapaan, nama depanmu, dan game favoritmu di tiga baris terpisah.

Cara memikirkannya. print menulis satu baris per pemanggilan. Tiga baris berarti tiga kali memanggil print; urutan pemanggilan adalah urutan baris di layar.

Solusi yang dikerjakan.

print("Hello there!")
print("Keiko")
print("Roblox")

Saat dijalankan, terminal mencetak:

Hello there!
Keiko
Roblox

Kesalahan umum.

  • Menaruh ketiga hal tersebut dalam satu pemanggilan print yang dipisahkan dengan koma. Itu bisa jalan, tapi semuanya ada di satu baris dengan tab di antaranya, bukan tiga baris.
  • Lupa tanda kutip. print(Hello there!) adalah error: tanpa tanda kutip, Lua membaca Hello dan there sebagai nama variabel, bukan teks.

Soal 2 — Cetak sebuah kutipan

Soal. Cetak sebuah kutipan di baris pertama dan nama pengarangnya di baris kedua.

Cara memikirkannya. Dua pemanggilan print. Yang pertama mencetak kutipannya (beserta tanda kutip ganda sebagai bagian dari teks); yang kedua mencetak nama pengarang dengan tanda hubung di depannya.

Ada satu hal yang perlu diperhatikan: kutipannya sendiri mengandung tanda kutip ganda ("). Kalau kamu juga membungkus seluruh string dengan tanda kutip ganda, Lua bingung di mana string itu berakhir. Ada dua cara mengatasinya:

  1. Bungkus string luar dengan kutip tunggal: '"quote here"'.
  2. Tetap gunakan kutip ganda di luar dan pakai \" (backslash sebelum kutip di dalam) supaya Lua tahu kutip itu bagian dari teks.

Pilihan pertama lebih sederhana. Gunakan itu.

Solusi yang dikerjakan.

print('"The best way to predict the future is to invent it."')
print("                                            - Alan Kay")

Spasi di awal pemanggilan print kedua mendorong nama pengarang ke dekat sisi kanan kutipannya.

Kesalahan umum.

  • Menulis print(""The best way...""). "" pertama adalah string kosong, lalu The dibaca sebagai nama variabel, dan Lua protes.
  • Menggunakan smart quotes (" ") alih-alih tanda kutip lurus ("). Word processor memasukkan ini secara otomatis; code editor tidak. VS Code aman, tapi periksa ulang teks yang disalin dari website.

Soal 3 — Perbaiki errornya

Soal. File starter punya lebih dari satu kesalahan. Buat file itu bisa jalan dan mencetak All good now.

Cara memikirkannya. Jalankan filenya. Baca error pertama. Perbaiki tepat apa yang disebutkan. Jalankan lagi, baca error berikutnya, dan ulangi sampai file bisa jalan.

Jangan coba mencari semua kesalahan dengan mata dulu. Error adalah petunjuk gratis.

Solusi yang dikerjakan. File starter terlihat seperti ini:

Print("Halfway there)
prnt('All good now.'

Ada empat masalah:

  1. Print seharusnya print (Lua peka terhadap huruf besar-kecil).
  2. String pertama tidak punya penutup ".
  3. prnt bukan fungsi yang nyata. Baris itu seharusnya memanggil print.
  4. Baris terakhir tidak punya penutup ).

Versi yang sudah diperbaiki:

print("Halfway there")
print("All good now.")

(Pertahankan kedua baris print atau hapus yang pertama. Selama file bisa jalan dan baris keluaran terakhir adalah All good now., itu sudah benar.)

Kesalahan umum.

  • Memperbaiki baris pertama tapi tidak menjalankan ulang sebelum memeriksa baris kedua. Error kedua kadang merupakan dampak dari yang pertama, jadi menjalankan ulang setiap kali membuat siklus umpan balik tetap rapat.
  • Memperbaiki prnt dengan menciptakan fungsi lain yang tidak ada. Lua hanya mengenal nama-nama yang memang dia ketahui. Kalau ragu, ketik namanya pelan-pelan dan cocokkan dengan yang ada di buku.

Tantangan — Cerita tiga baris

Soal. Tulis sebuah cerita mini tiga baris (persiapan, masalah, penyelesaian) dengan komentar multi-baris di bagian atas yang menjelaskan ceritanya.

Cara memikirkannya. Dua bahan yang sudah kamu ketahui: --[[ ]] untuk komentar multi-baris dan print untuk keluaran. Buat sketsa ceritanya dalam bahasa biasa dulu, lalu ubah setiap baris menjadi pemanggilan print.

Solusi yang dikerjakan.

--[[
  A small story about a player who finds a chest in a cave,
  realises it is locked, and figures out how to open it.
]]

print("A lone player walked into the cave and saw a chest.")
print("The chest was locked, and the key was nowhere in sight.")
print("She remembered the riddle on the wall and spoke the password.")

Kesalahan umum.

  • Lupa penutup ]]. Kalau begitu, semua yang ada setelah --[[ dianggap sebagai komentar, termasuk pemanggilan print-mu, dan program tidak mencetak apa pun.
  • Menaruh --[[ di tengah baris kode. Bisa jalan, tapi membingungkan. Untuk sekarang, taruh komentar multi-baris di barisnya sendiri.

Selesai?

Kalau setiap soal berjalan dengan bersih, kamu telah menyelesaikan bab pertamamu. Tiga bab berikutnya melengkapi dasar-dasar terminal: komentar untuk meninggalkan catatan, toolkit print untuk menampilkan sesuatu persis seperti yang kamu inginkan, dan membaca pesan error untuk saat ada yang salah.