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 value

Soal 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")
end

Kode 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.