Study
Luau

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.

Editor Latihan

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.