Class Dasar dan Desain Konstruktor
Rancang factory Class() yang menyiapkan metatabel dan konstruktor new().
Class Dasar dan Desain Konstruktor adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Lua Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Lua Academy mencakup 4 pelajaran total.
Tujuan: Pabrik Kelas yang Dapat Digunakan Kembali
Kita menginginkan fungsi Class() yang mengembalikan objek kelas baru dengan konstruktor, pencarian metode, dan semantik pemrograman berorientasi objek yang tepat.
Kerangka Pabrik Kelas
Pabrik tersebut membuat tabel kelas dengan metatabel untuk pengiriman metode.
local function Class()
local cls = {}
cls.__index = cls
cls.__name = "AnonymousClass"
function cls:new(...)
local instance = setmetatable({}, cls)
if instance.init then instance:init(...) end
return instance
end
return cls
endMendefinisikan Kelas
Buat kelas, definisikan init (konstruktor), dan tambahkan metode.
local Animal = Class()
Animal.__name = "Animal"
function Animal:init(name, sound)
self.name = name
self.sound = sound
end
function Animal:speak()
print(self.name .. " says " .. self.sound)
end
local cat = Animal:new("Cat", "Meow")
cat:speak() -- Cat says MeowPola Konstruktor
Konstruktor :new(...) membuat instans melalui setmetatable({}, cls), lalu memanggil :init(...) untuk inisialisasi. Hal ini memisahkan alokasi dari inisialisasi.
Nama Kelas untuk Penelusuran Kesalahan
Simpan cls.__name dan definisikan __tostring agar instans ditampilkan secara bermakna.
function Animal:__tostring()
return "<" .. Animal.__name .. ": " .. self.name .. ">"
end
print(tostring(cat)) -- <Animal: Cat>Nilai Bawaan dalam init
Berikan nilai bawaan dalam init menggunakan or.
function Vehicle:init(opts)
self.speed = opts.speed or 0
self.fuel = opts.fuel or 100
self.engine = opts.engine or "petrol"
endMetode Kelas vs Metode Instans
Metode yang didefinisikan dengan function cls.method() adalah metode kelas (tanpa self). Metode yang didefinisikan dengan function cls:method() menerima instans sebagai self.
Properti Statis
Properti yang diatur langsung pada tabel kelas digunakan bersama oleh semua instans (kecuali tertutupi oleh bidang instans).
Animal.count = 0
function Animal:init(name, sound)
Animal.count = Animal.count + 1
self.name = name; self.sound = sound
end
print(Animal.count) -- 0
Animal:new("Dog","Woof")
print(Animal.count) -- 1Konstruktor Salinan
Metode :clone() membuat salinan instans dengan menyalin bidangnya secara dangkal.
function Animal:clone()
local copy = setmetatable({}, getmetatable(self))
for k, v in pairs(self) do copy[k] = v end
return copy
endMetametode Kesetaraan
Definisikan __eq untuk perbandingan kesetaraan yang bermakna antarinstans.
Animal.__eq = function(a, b)
return a.name == b.name
endMengapa Tidak Mengakses Data Mentah?
Gunakan self.field (bukan rawget) agar akses bidang berbasis metametode tetap berfungsi pada kelas turunan. Gunakan rawget hanya ketika pengabaian tersebut memang diperlukan.
Pertanyaan tentang Rancangan Konstruktor
Mengapa init dipanggil secara terpisah dari pengalokasi new?
Ringkasan: Kelas Dasar dan Konstruktor
Pabrik Class() membuat tabel sebagai kelas, menetapkan __index = cls untuk pencarian metode, serta menyediakan :new() dan :init(). Ini adalah dasar bagi semua pola pemrograman berorientasi objek Lua.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Class Dasar dan Desain Konstruktor” gratis?
Ya — teks lengkap “Class Dasar dan Desain Konstruktor” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Lua Academy, upgrade ke CoddyKit PRO. Kursus Lua Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Class Dasar dan Desain Konstruktor”?
Rancang factory Class() yang menyiapkan metatabel dan konstruktor new(). Kamu berlatih Lua Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Lua Academy?
Tidak diperlukan pengalaman sebelumnya. Lua Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Class Dasar dan Desain Konstruktor” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Lua Academy ini?
Ya. Setiap pelajaran Lua Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Class Dasar dan Desain Konstruktor
- Pewarisan Multi-Tingkat
- Komposisi Mixin dan Pemeriksaan Interface
- instanceof dan Introspeksi Tipe