Topik ini menulis dan menjalankan program Lua pertama. Berkas halo.lua disajikan beserta penjelasan setiap barisnya, konsep chunk dijelaskan sebagai unit eksekusi Lua, aturan penulisan dasar dirangkum, dan program kedua berupa daftar belanja memperlihatkan pencetakan berformat dengan penjumlahan sederhana. Setelah topik ini selesai, siklus menyunting berkas lalu mengeksekusinya dari terminal telah dipraktikkan penuh.
Berkas program pertama#
Program Lua berupa berkas teks biasa berakhiran .lua. Buat berkas halo.lua di direktori kerja latihan dengan isi berikut, lalu perhatikan keluarannya ketika dijalankan.
-- halo.lua
-- program pertama, mencetak dua baris teks
print("Halo, Lua")
print("Program pertama berhasil dijalankan")Halo, Lua
Program pertama berhasil dijalankanSetiap barisnya berperan sebagai berikut. Dua baris pertama adalah komentar yang diawali --, yaitu teks yang diabaikan penerjemah dan hanya dimaksudkan bagi pembaca manusia. Komentar di bagian atas berkas biasanya menyebut nama dan tujuan programnya. Baris ketiga dan keempat memanggil print, fungsi bawaan Lua yang menulis nilai ke keluaran standar, yaitu aliran teks yang tampil di terminal. Nilai yang dikirim berupa string, yaitu urutan karakter yang diapit tanda kutip ganda, sehingga setiap pemanggilan print menghasilkan satu baris teks.
Program dijalankan dengan menambahkan nama berkas setelah perintah lua.
# jalankan program pertama dari folder kerja latihan
lua halo.luaHalo, Lua
Program pertama berhasil dijalankanPerintah lua membaca berkas halo.lua, mengompilasinya, lalu mengeksekusinya dari baris pertama hingga terakhir. Kedua pernyataan print berurutan menghasilkan dua baris keluaran yang persis sama dengan blok sebelumnya, dan penerjemah kembali ke prompt setelah baris terakhir selesai.
Chunk sebagai unit eksekusi#
Manual Lua menyebut unit eksekusi penerjemah sebagai chunk, yaitu rangkaian pernyataan yang diolah sebagai satu kesatuan. Satu berkas .lua merupakan satu chunk, dan penerjemah mengeksekusi pernyataannya secara berurutan dari atas ke bawah. Konsep ini menjelaskan mengapa program Lua tidak memerlukan fungsi utama seperti pada bahasa lain. Pernyataan yang ditulis langsung di tingkat berkas berjalan saat chunk dieksekusi, dalam urutan penulisannya.
Chunk tidak selalu berasal dari berkas. Penerjemah juga mengeksekusi chunk yang berasal dari string, misalnya saat aplikasi host memuat skrip dari basis data atau dari editor di dalam gim. Mekanisme ini memang disediakan untuk kebutuhan penyematan, tetapi pada jalur ini setiap chunk berupa satu berkas yang disimpan di direktori kerja. Pembiasaan satu berkas untuk satu program menjaga setiap contoh tetap mandiri dan mudah dijalankan ulang. Urutan eksekusi ini berarti pernyataan di atas selalu dieksekusi sebelum pernyataan di bawahnya, sehingga menata berkas dari bagian umum ke bagian khusus memudahkan pembacaan program. Kesalahan penulisan pada baris mana pun dilaporkan penerjemah bersama nomor barisnya, sehingga chunk yang gagal mudah dilacak.
Aturan penulisan dasar#
Contoh pertama sudah memuat sebagian besar aturan yang dibutuhkan sebelum materi lanjutan. Lua membedakan huruf besar dan huruf kecil, sehingga print dan Print adalah dua nama yang berbeda. String diapit tanda kutip ganda atau tanda kutip tunggal, dan keduanya menghasilkan nilai yang sama, sehingga pilihan kutipan disesuaikan dengan keterbacaan. Akhir baris berfungsi sebagai pemisah pernyataan, sedangkan tanda titik koma hanya diperlukan ketika dua pernyataan sengaja ditulis pada satu baris. Titik koma di akhir pernyataan bersifat opsional dan lazim diabaikan.
Contoh berikut memperlihatkan ketiga aturan itu sekaligus.
-- string dalam kutip ganda dan kutip tunggal bernilai sama
print("belanja")
print('belanja')
-- dua pernyataan pada satu baris dipisah dengan titik koma
print(1); print(2)belanja
belanja
1
2Keluaran menegaskan bahwa dua baris pertama menghasilkan teks yang identik, sedangkan dua baris terakhir menunjukkan pernyataan yang dipadatkan tetap dieksekusi berurutan. Pada praktiknya, satu pernyataan per baris menjadi gaya yang disarankan, dan titik koma disisakan untuk kasus khusus saja.
Program kedua, daftar belanja berformat#
Program kedua memperluas pola yang sama menjadi keluaran yang lebih terformat. Buat berkas daftar-belanja.lua di direktori kerja dengan isi berikut.
-- daftar-belanja.lua
-- mencetak daftar belanja berformat beserta totalnya
print("=== Daftar Belanja ===")
print("Beras 5 kg", 62000)
print("Telur 1 kg", 29000)
print("Minyak 2 L", 38000)
print("Total", 62000 + 29000 + 38000)=== Daftar Belanja ===
Beras 5 kg 62000
Telur 1 kg 29000
Minyak 2 L 38000
Total 129000Perbedaan utama dengan program pertama terletak pada jumlah argumen print. Ketika print menerima beberapa argumen, argumen-argumennya dicetak pada satu baris dan dipisahkan dengan satu karakter tab, sehingga kolom nama barang dan harga tampil berdampingan. Baris terakhir mengirim ekspresi penjumlahan sebagai argumen. Ekspresi itu dihitung lebih dahulu dan hasilnya, 129000, dicetak bersama label Total. Angka dicetak dalam bentuk desimal tanpa pemisah ribuan. Pemisahan kolom dengan tab membuat keluarannya mudah dibaca dan mudah ditempel ke pengolah lembar kerja tanpa pengaturan tambahan. Pemformatan yang lebih rapi memerlukan fungsi pustaka string, sehingga pada tahap ini pemisah tab milik print sudah memadai.
Program dijalankan dengan pola yang sama seperti sebelumnya.
# jalankan program kedua dari folder kerja latihan
lua daftar-belanja.lua=== Daftar Belanja ===
Beras 5 kg 62000
Telur 1 kg 29000
Minyak 2 L 38000
Total 129000Dua program sederhana ini sudah memuat siklus kerja yang lengkap, yaitu menyunting berkas, menjalankannya dengan lua, membaca keluaran, lalu menyunting lagi. Keluaran program pada jalur ini selalu ditampilkan apa adanya, sehingga perbedaan keluaran antara mesin pembaca dan contoh menjadi sinyal yang perlu diselidiki, bukan diabaikan.
Kesalahan umum#
Tiga kesalahan paling sering muncul saat mempraktikkan topik ini. Pertama, perintah lua dijalankan dari direktori yang tidak memuat berkas skripnya. Blok berikut sengaja memanggil berkas yang tidak ada untuk memperlihatkan bentuk pesannya.
# contoh kesalahan, memanggil berkas yang tidak ada
lua halo-tidak-ada.lualua: cannot open halo-tidak-ada.lua: No such file or directoryPesan error diawali nama program lua, lalu menyebut penyebabnya, yaitu berkas yang diminta tidak ditemukan. Perbaikannya adalah berpindah ke direktori berkas dengan cd sebelum mengeksekusi, atau memanggil berkas dengan jalurnya.
Kesalahan kedua berupa string yang tidak ditutup tanda kutipnya. Penerjemah melaporkan error sintaks beserta nomor barisnya, dan perbaikannya memasangkan kembali tanda kutip pembuka dan penutup. Kesalahan ketiga yang jarang disadari adalah menyimpan program dengan ekstensi lain, misalnya .txt, karena perintah lua tetap membuka nama yang diketik dan pesan berkas tidak ditemukan pun muncul kembali. Pastikan ekstensi berkasnya .lua dan nama yang dipanggil sama persis dengan nama di direktori. Membaca pesan error sampai tuntas sebelum menyunting kode mempercepat perbaikan karena pesan tersebut hampir selalu menunjuk baris yang bermasalah.
Ringkasan#
- Program Lua berupa berkas teks .lua yang dieksekusi dengan
lua nama-berkas.lua, dan satu berkas adalah satu chunk yang berjalan berurutan dari atas ke bawah. - print menulis nilai ke keluaran standar, beberapa argumen dipisahkan dengan tab, dan komentar yang diawali
--diabaikan penerjemah. - Lua membedakan huruf besar dan huruf kecil, string diapit kutip ganda atau kutip tunggal, dan titik koma antarpernyataan bersifat opsional.
- Pesan error penerjemah menyebut penyebab dan lokasinya, misalnya berkas yang tidak ditemukan pada saat eksekusi.
Referensi#
- Manual Referensi Lua 5.4 — Lua.org — Mendefinisikan chunk, komentar, string, dan aturan sintaks dasar bahasa Lua.
- Programming in Lua, edisi pertama — Lua.org — Bab awal memperkenalkan program pertama dan cara menjalankan berkas Lua dari terminal.