Lua - Metatables: Panduan untuk Pemula
Halo teman-teman yang sedang belajar pemrograman! Hari ini, kita akan melakukan perjalanan yang menarik ke dunia metatable Lua. Jangan khawatir jika Anda belum pernah menulis baris kode pun sebelumnya - saya akan menjadi panduan ramah Anda, dan kita akan mengexploreasi topik ini bersama. Jadi, ambil secangkir minuman favorit Anda, dan mari kita masuk ke dalamnya!
Apa Itu Metatable?
Sebelum kita masuk ke detailnya, mari kita pahami apa itu metatable. Bayangkan Anda memiliki kotak peralatan ajaib yang dapat memberikan superpower kepada tabel Lua biasa. Itu sebenarnya apa yang dilakukan metatable! Itu adalah tabel Lua biasa yang menentukan perilaku spesial untuk tabel lain.
Metamethod __index
Tempat pertama yang kita kunjungi dalam perjalanan ajaib ini adalah metamethod __index
. Penyihir kecil ini membantu kita mengatasi kunci yang hilang di dalam tabel kita.
Penggunaan Dasar __index
Mari kita mulai dengan contoh sederhana:
local buah = {apple = "merah", banana = "kuning"}
local metatable = {
__index = function(tabel, kunci)
return "warna tak diketahui"
end
}
setmetatable(buah, metatable)
print(buah.apple) -- Output: merah
print(buah.cherry) -- Output: warna tak diketahui
Dalam contoh ini, kita membuat tabel buah
dan metatable dengan fungsi __index
. Ketika kita mencoba mengakses kunci yang tidak ada (seperti "cherry"), instead of giving us an error, Lua memanggil fungsi __index
kita, yang mengembalikan "warna tak diketahui".
__index Sebagai Tabel
Metamethod __index
juga dapat menjadi sebuah tabel:
local hewan = {dog = "woof", cat = "meow"}
local metatable = {
__index = {
cow = "moo",
pig = "oink"
}
}
setmetatable(hewan, metatable)
print(hewan.dog) -- Output: woof
print(hewan.cow) -- Output: moo
Di sini, jika kunci tidak ditemukan di hewan
, Lua mencari di tabel __index
.
Metamethod __newindex
Berikutnya adalah __newindex
, penjaga penugasan kunci baru.
local terpelihara = {}
local metatable = {
__newindex = function(tabel, kunci, nilai)
error("Tabel ini adalah read-only!")
end
}
setmetatable(terpelihara, metatable)
terpelihara.newKey = "test" -- Ini akan memicu kesalahan
Dalam contoh ini, setiapupaya menambahkan kunci baru ke terpelihara
akan memicu pesan kesalahan kita. Itu seperti memiliki penjaga untuk tabel Anda!
Menambahkan Perilaku Operator ke Tabel
Sekarang, mari kita beri tabel kita kemampuan matematika!
Metamethod __add
local vektor = {x = 10, y = 20}
local metatable = {
__add = function(v1, v2)
return {x = v1.x + v2.x, y = v1.y + v2.y}
end
}
setmetatable(vektor, metatable)
local hasil = vektor + {x = 5, y = 10}
print(hasil.x, hasil.y) -- Output: 15 30
Kita baru saja mengajarkan tabel vektor
bagaimana cara melakukan penjumlahan! Metamethod __add
dipanggil saat kita menggunakan operator +
pada tabel kita.
Metamethod __call
Ingin membuat tabel Anda berperilaku seperti fungsi? Kenalkan __call
!
local penyapa = {name = "Penggemar Lua"}
local metatable = {
__call = function(tabel, salam)
return salam .. ", " .. tabel.name .. "!"
end
}
setmetatable(penyapa, metatable)
print(penyapa("Hello")) -- Output: Hello, Penggemar Lua!
Sekarang tabel penyapa
dapat dipanggil seperti fungsi. Magic, kan?
Metamethod __tostring
Terakhir tapi bukan paling kurang, mari kita membuat tabel kita lebih menarik dengan __tostring
.
local orang = {name = "Alice", age = 30}
local metatable = {
__tostring = function(tabel)
return tabel.name .. " berusia " .. tabel.age .. " tahun"
end
}
setmetatable(orang, metatable)
print(orang) -- Output: Alice berusia 30 tahun
Metamethod __tostring
dipanggil saat kita mencoba mengonversi tabel kita menjadi string, seperti saat kita menggunakan print()
.
Kesimpulan
Selamat! Anda telah mengambil langkah pertama ke dalam dunia yang menakjubkan metatable Lua. Kita telah meliputi banyak hal, mulai dari penanganan kunci yang hilang dengan __index
hingga membuat tabel callable dengan __call
. Ingat, latihan membuat sempurna, jadi jangan khawatir untuk mencoba konsep-konsep ini.
Berikut adalah tabel referensi metamethod yang kita pelajari:
Metamethod | Tujuan |
---|---|
__index | Menangani akses ke kunci yang hilang |
__newindex | Mengontrol penambahan kunci baru |
__add | Menentukan perilaku penjumlahan |
__call | Membuat tabel callable seperti fungsi |
__tostring | Menyediakan representasi string dari tabel |
Terus eksplorasi, terus kode, dan yang paling penting, bersenang-senang dengan Lua! Siapa tahu apa program ajaib yang Anda akan buat berikutnya?
Credits: Image by storyset