10. Membaca pesan error — Solusi PR
File solusi .lua ada di
exercises/10/homework/solutions/. PR-PR ini melatih
perulangan: jalankan, baca error pertama, perbaiki satu hal,
jalankan lagi.
Soal 1 — Beri nama errornya
Soal. Identifikasi tipe error-nya, lalu perbaiki.
Cara pikirnya. Jalankan file-nya, baca pesannya, dan
cocokkan dengan salah satu dari empat tipe: unfinished string, call a
nil value, concatenate a nil value, atau 'end'
expected.
Solusi. Baris awalnya adalah:
print("Hello, " .. player_name)tanpa variabel player_name yang didefinisikan. Error-nya
adalah attempt to concatenate a nil value — variabelnya tidak
punya nilai, jadi nilainya adalah nil. Perbaikannya:
local player_name = "Keiko"
print("Hello, " .. player_name)
-- error type: attempt to concatenate a nil valueSoal 2 — Perbaiki tanda kutipnya
Soal. Perbaiki sebuah unfinished string.
Solusi.
print("A wizard is never late.")Satu-satunya perubahan adalah tanda kutip penutup " yang
hilang sebelum ).
Kesalahan umum.
- Menambahkan tanda kutipnya setelah
). Tanda kutip penutup harus di akhir teks, sebelum tanda kurung penutup.
Soal 3 — Perbaiki salah ketiknya
Soal. Nama fungsi yang salah ketik menyebabkan error "attempt to call a nil value".
Solusi. Kode awalnya punya
prnt("Fixed!"). Pesan error-nya menyebutkan pelakunya:
(global 'prnt'). Perbaiki ejaannya:
print("Fixed!")Kesalahan umum.
- "Memperbaiki" dengan membuat nama yang berbeda. Lua hanya mengenal
nama yang memang dikenalnya. Ketika pesan error menyebut
'prnt', perbaikannya hampir selalu adalah nama fungsi yang benar ditulis dengan ejaan yang tepat —print.
Tantangan — Tiga sekaligus
Soal. Tiga kesalahan, masing-masing satu jenis, diperbaiki satu per satu.
Cara pikirnya. Jalankan. Error pertama adalah
unfinished string atau print yang salah ketik, mana pun
yang muncul lebih dulu. Perbaiki. Jalankan lagi — error berikutnya
muncul. Perbaiki. Jalankan lagi untuk end yang hilang.
Perulangannya, bekerja sesuai tujuan.
Solusi.
print("Starting up")
print("Working")
if true then
print("done")
endKode awal punya tanda kutip penutup yang hilang di baris pertama,
prnt di baris kedua, dan sebuah if tanpa
end. Diperbaiki dalam tiga langkah, hasilnya:
Starting up
Working
done
Kesalahan umum.
- Memperbaiki ketiganya sekaligus dan jadi kehilangan jejak perubahan mana yang mengubah apa. Satu error, satu perbaikan, jalankan lagi — bahkan ketika kamu merasa sudah melihat semuanya.
Selesai?
Ini adalah akhir dari Bagian 2. Kamu sudah bisa menginstal dan
menjalankan Lua, mencetak tepat apa yang kamu mau, menambahkan komentar
pada kode, dan membaca error dari Lua. Mini-proyek Bagian 2 — ASCII Name
Banner — menggunakan kemampuan print-mu untuk membangun
gambar dari teks. Selanjutnya Bagian 3 membahas variabel, string, angka,
dan input.