10. Membaca pesan error
Ketika sebuah program salah, Lua tidak diam saja — ia mencetak sebuah pesan error dan berhenti. Pemula melihat teks merah itu sebagai sesuatu yang menakutkan dan langsung mulai mengubah-ubah sesuatu secara asal. Tapi itu bukan sekadar teks acak: Lua sedang memberi tahu kamu tepat di baris mana yang harus dilihat, dan memberi petunjuk apa yang salah. Bab ini mengajarkan kamu cara membacanya.
Bentuk sebuah error
Hampir semua error di Lua punya bentuk yang sama:
lua: file.lua:BARIS: pesan
Tiga bagian, dan kamu membacanya dalam urutan ini:
- Nomor baris (
file.lua:3berarti baris 3). Lihat ke sana dulu. Selalu. - Pesan — deskripsi singkat tentang apa yang salah.
- Kadang ada stack traceback di bawahnya. Sebagai pemula, abaikan saja traceback-nya; baris pertama sudah berisi yang kamu butuhkan.
Empat error yang pasti kamu temui
Keempat ini mencakup sebagian besar kesalahan di awal belajar. Belajarlah mengenali mereka dengan cepat.
Unfinished string
Kamu lupa menutup tanda kutip.
print("hi)lua: hello.lua:1: unfinished string near '"hi)'
"Unfinished string" berarti Lua menemukan tanda kutip
pembuka tapi sampai ke akhir baris tanpa menemukan tanda kutip penutup.
Cara memperbaiki: tambahkan " yang kurang.
Attempt to call a nil value
Kamu salah mengeja nama fungsi.
prnt("hi")lua: hello.lua:1: attempt to call a nil value (global 'prnt')
Lua sedang bilang: kamu mencoba memanggil prnt, tapi
tidak ada hal seperti itu, jadi nilainya nil, dan kamu
tidak bisa memanggil nil. Nama di antara tanda kutip
('prnt') adalah kata yang salah eja. Cara memperbaiki:
tulis print dengan benar.
Attempt to concatenate a nil value
Kamu menyambungkan .. ke sesuatu yang tidak punya
nilai.
print("score: " .. nil)lua: hello.lua:2: attempt to concatenate a nil value
Sesuatu di salah satu sisi .. bernilai nil
— sering kali variabel yang belum pernah diberi nilai, atau namanya
salah eja. Cara memperbaiki: pastikan kedua sisi memiliki string atau
angka.
'end' expected
Kamu membuka sebuah if, for,
while, atau function tapi tidak pernah
menutupnya.
if x > 3 then
print("big")lua: hello.lua:3: 'end' expected (to close 'if' at line 1) near <eof>
Yang ini cukup membantu: ia memberi tahu kamu blok mana yang
belum ditutup dan di baris berapa ia dimulai
(to close 'if' at line 1). <eof> berarti
"end of file" — Lua sudah sampai di akhir file tapi masih menunggu
end. Cara memperbaiki: tambahkan end.
Siklus edit-jalankan-perbaiki
Cara yang benar untuk menangani error bukan dengan mencari semuanya sekaligus lewat mata, melainkan dengan menjalankan siklus yang ketat:
- Jalankan file.
- Baca error pertama: nomor baris, lalu pesannya.
- Perbaiki satu hal itu saja.
- Jalankan lagi.
Ulangi sampai program berjalan tanpa masalah. Jangan perbaiki tiga hal sekaligus — salah satu "perbaikan" mungkin keliru, dan kamu tidak bisa tahu perubahan mana yang berhasil. Satu error, satu perbaikan, jalankan lagi.
Satu kesalahan kadang menghasilkan pesan yang membingungkan, atau
menunjuk ke baris setelah masalah sebenarnya (sebuah
end yang hilang sering dilaporkan di akhir file). Kalau
baris yang disebutkan terlihat sudah benar, cek baris tepat di
atasnya.
Buka exercises/10/01-three-bugs.lua. File itu tidak bisa
dijalankan. Gunakan siklus edit-jalankan-perbaiki: jalankan, baca error
pertama, perbaiki hanya itu, lalu jalankan lagi. Terus lakukan sampai
program mencetak All fixed!.
Error bukan berarti gagal
Setiap programmer membaca pesan error setiap hari. Itu bukan tanda bahwa kamu tidak berbakat — itu adalah bolak-balik yang normal dalam menulis kode. Membaca error dengan tenang hanya berarti kamu sudah membaca beberapa ribu di antaranya. Kamu sedang dalam perjalanan ke sana.
PR
File-file PR ada di exercises/10/homework/.
Soal 1 — Sebutkan jenis error-nya
Buka exercises/10/homework/01-name-the-error.lua. File
itu berisi satu baris yang rusak. Jalankan, baca pesannya, dan (dalam
sebuah komentar di bagian bawah) tulis mana dari empat jenis error di
bab ini yang sesuai. Lalu perbaiki.
Soal 2 — Perbaiki tanda kutip
Buka exercises/10/homework/02-fix-the-quote.lua. File
itu punya unfinished string. Perbaiki supaya program mencetak kutipannya
dalam satu baris.
Soal 3 — Perbaiki typo
Buka exercises/10/homework/03-fix-the-typo.lua. Sebuah
nama fungsi salah eja, menghasilkan error "attempt to call a nil value".
Perbaiki.
Tantangan — Tiga sekaligus
Buka exercises/10/homework/04-three-in-a-row.lua. File
itu punya tiga kesalahan terpisah, masing-masing satu jenis: unfinished
string, print yang salah eja, dan end yang
hilang. Perbaiki satu per satu, jalankan setelah setiap perbaikan,
sampai file mencetak:
done
Mentok atau sudah selesai? Buka halaman solusi PR.