Table & Metatable di Luau
Penjelasan
Tabel adalah satu-satunya struktur data komposit di Lua/Luau, dipakai untuk array, dictionary, sekaligus objek — semuanya lewat sintaks yang sama. Metatable memungkinkan kustomisasi perilaku tabel, seperti operator overloading (`__add`, `__eq`) atau fallback lookup lewat `__index`, yang jadi fondasi pola OOP di Lua walau bahasanya sendiri tidak punya class bawaan. Pola paling umum di Luau/Roblox adalah menggunakan `__index` untuk membuat "class" sederhana: tabel metatable menyimpan method bersama, dan tiap instance objek baru diarahkan ke metatable itu lewat `setmetatable()`, sehingga method bisa dipanggil dari tiap instance tanpa duplikasi kode.
Contoh Konsep
local Karakter = {}
Karakter.__index = Karakter
function Karakter.baru(nama: string, hp: number)
local self = setmetatable({}, Karakter)
self.nama = nama
self.hp = hp
return self
end
function Karakter:kurangiHp(jumlah: number)
self.hp -= jumlah
print(self.nama .. " sisa HP: " .. self.hp)
end
local pemain = Karakter.baru("Andi", 100)
pemain:kurangiHp(30)
Praktikum
Buat "class" Senjata dengan field nama dan damage, serta method serang() yang mencetak berapa damage yang diberikan, menggunakan pola metatable __index.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Selalu gunakan sintaks titik dua (`:`) saat mendefinisikan method (bukan titik biasa) supaya parameter `self` otomatis diteruskan — lupa ini penyebab error "attempt to index nil" yang paling umum bagi pemula.