Konstruktor :new()
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan Lua di Coddy. Pelajaran 8 dari 70.
Membuat object secara manual, membuat tabel kosong, mengatur metatable-nya, dan menautkan __index menjadi pekerjaan yang berulang. Solusi standarnya adalah mendefinisikan method konstruktor :new() langsung di dalam class agar semua ini ditangani untukmu.
Berikut polanya:
local Dog = {}
Dog.__index = Dog
function Dog:new()
local instance = {}
setmetatable(instance, self)
return instance
end
function Dog:bark()
print("Woof!")
endMari kita uraikan apa yang terjadi di dalam :new(). Pertama, kita membuat tabel kosong bernama instance. Lalu, kita menetapkan metatable-nya ke self, yaitu Dog saat kita memanggil Dog:new().
Karena Dog.__index menunjuk ke Dog itu sendiri, instance dapat menemukan semua method yang didefinisikan di Dog. Terakhir, kita mengembalikan object baru.
Perhatikan baris Dog.__index = Dog di luar konstruktor. Ini adalah jalan pintas yang umum. Alih-alih membuat metatable terpisah, tabel class berfungsi sebagai prototype sekaligus metatable.
Sekarang, pembuatan object menjadi rapi dan konsisten:
local myDog = Dog:new()
myDog:bark() -- output: Woof!Setiap class yang kamu buat akan mengikuti struktur yang sama ini. Konstruktor :new() menjadi satu-satunya tempat pembuatan object, sehingga kodemu tetap teratur dan mudah diprediksi.
Tantangan
MudahMari kita buat class Cat menggunakan pola constructor standar yang baru saja kamu pelajari. Kamu akan mengatur kodemu dalam dua file untuk berlatih menyusun struktur module dengan benar.
Kamu akan membuat:
Cat.lua: Definisikan classCatdengan pola constructor lengkap. Class-mu harus mencakup:- Tabel class dengan
__indexyang menunjuk ke dirinya sendiri - Constructor
:new()yang membuat instance, mengatur metatable-nya, lalu mengembalikannya - Method
:meow()yang mencetak suara kucing
- Tabel class dengan
main.lua: Require module Cat-mu dan gunakan constructor untuk membuat instance kucing. Lalu panggil method-nya untuk memastikan semuanya terhubung dengan benar.
Kamu akan menerima satu input: jumlah kali kucingmu harus mengeong.
Method :meow()-mu harus mencetak persis:
Meow!Di file utama, buat kucing menggunakan Cat:new() dan panggil :meow() sebanyak jumlah yang ditentukan.
Contohnya, jika input-nya 3, output-nya harus:
Meow!
Meow!
Meow!Coba sendiri
-- Muat module Cat dengan require
local Cat = require('Cat')
-- Baca input: jumlah kali untuk mengeong
local times = tonumber(io.read())
-- TODO: Buat instance cat menggunakan Cat:new()
-- TODO: Panggil method :meow() sebanyak jumlah yang ditentukan
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Object
1Konsep "Self"
Tabel dengan Fungsi'self' EksplisitSintaks Titik DuaTitik vs Titik DuaRangkuman, Titik Bergerak4Proyek: Bank Digital
Penyiapan Proyekmethod Setoran7Polimorfisme & Overriding
Menimpa methodMemanggil method indukDuck TypingAntarmuka UmumMemeriksa TipeRingkasan: Peran Karyawan10Proyek: Pengelola Bentuk
Penyiapan Proyekclass Rectangleclass Circlemethod KelilingKumpulan BentukLuas TotalSaring Bentuk2Pola Prototype untuk class
Konsep PrototypeMenghubungkan dengan __indexKonstruktor :new()Menginisialisasi AtributInstans yang MandiriRangkuman: Pabrik Mobil5Pembebanan Operator dalam OOP
Menjumlahkan ObjekMengurangkan ObjekMenggabungkan ObjekMembandingkan Objek (<, >)Ulasan: Aritmetika Dompet8Enkapsulasi
Konvensi PenamaanClosure untuk PrivasiAkses melalui ClosureTabel Hanya-BacaLogika ValidasiRangkuman: Brankas Aman11Pola Desain (Ringan)
Fungsi FactoryTabel SingletonPola IteratorObserver (Listener)Rangkuman, Factory Logger3State dan Behavior pada object
Variabel InstansGetter methodSetter methodProperty TerhitungMemformat stringPemeriksaan KesetaraanRangkuman: Nilai Siswa6Dasar-Dasar Pewarisan
Menyiapkan PewarisanMewarisi methodMemperluas KonstruktorMenambahkan method untuk ChildSama vs UnikRangkuman: Hierarki BentukLatihan sendiri: Compiler Lua online