Panduan Pemula untuk Metatable Lua
Hai teman-teman yang sedang belajar pemrograman! Hari ini, kita akan melakukan perjalanan menarik ke dunia metatable Lua. Jangan khawatir jika Anda belum pernah menulis satu baris kode sebelumnya - saya akan menjadi panduan ramah Anda, dan kita akan menjelajahi topik ini bersama-sama. Jadi, ambil secangkir minuman kesukaan Anda, dan mari kita masuk ke dalamnya!
Apa Itu Metatable?
Sebelum kita masuk ke hal yang mendalam, mari kita mengerti apa itu metatable. Bayangkan Anda punya kotak peralatan ajaib yang dapat memberikan kekuatan super bagi tabel Lua biasa. Itu sebenarnya apa yang dilakukan metatable! Itu adalah tabel Lua biasa yang menentukan perilaku khusus bagi tabel lain.
Metametode __index
Tempat pertama yang kita kunjungi dalam perjalanan ajaib ini adalah metametode __index
. Penyihir kecil ini membantu kita mengatasi kunci yang hilang 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"), bukannya memberikan kesalahan, Lua memanggil fungsi __index
kita, yang mengembalikan "warna tak diketahui".
__index Sebagai Tabel
Metametode __index
juga dapat menjadi 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 dalam hewan
, Lua mencari di tabel __index
.
Metametode __newindex
Selanjutnya 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 = "tes" -- Ini akan memicu kesalahan
Dalam contoh ini, setiap upaya untuk menambahkan kunci baru ke terpelihara
akan memicu pesan kesalahan kita. Itu seperti memiliki penjaga untuk tabel Anda!
Menambah perilaku operator ke Tabel
Sekarang, mari kita berikan tabel kita beberapa keterampilan matematika!
Metametode __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! Metametode __add
dipanggil saat kita menggunakan operator +
pada tabel kita.
Metametode __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("Halo")) -- Output: Halo, Penggemar Lua!
Sekarang tabel penyapa
dapat dipanggil seperti fungsi. Magic, kan?
Metametode __tostring
Terakhir tapi bukan paling kurang, mari kita membuat tabel kita tampak 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
Metametode __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 menarik metatable Lua. Kita telah menelusuri banyak hal, dari mengatasi kunci yang hilang dengan __index
hingga membuat tabel kita dapat dipanggil dengan __call
. Ingat, latihan membuat sempurna, jadi jangan khawatir untuk mencoba konsep-konsep ini.
Berikut adalah tabel rujukan singkat metametode yang kita pelajari:
Metametode | Tujuan |
---|---|
__index | Menghandle akses ke kunci yang hilang |
__newindex | Mengontrol penambahan kunci baru |
__add | Menentukan perilaku penjumlahan |
__call | Membuat tabel dapat dipanggil seperti fungsi |
__tostring | Menyediakan representasi string dari tabel |
Terus menjelajahi, terus mengoding, dan terutama, bersenang-senang dengan Lua! Siapa tahu, program ajaib apa yang Anda akan buat berikutnya?
Credits: Image by storyset