Menu
CoddyTech

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!")
end

Mari 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.

challenge icon

Tantangan

Mudah

Mari 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 class Cat dengan pola constructor lengkap. Class-mu harus mencakup:
    • Tabel class dengan __index yang menunjuk ke dirinya sendiri
    • Constructor :new() yang membuat instance, mengatur metatable-nya, lalu mengembalikannya
    • Method :meow() yang mencetak suara kucing
    Kembalikan tabel class di akhir file.
  • 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
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Object

Latihan sendiri: Compiler Lua online