Menu
CoddyTech

Menginisialisasi Atribut

Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan Lua di Coddy. Pelajaran 9 dari 70.

Konstruktor :new() yang kamu pelajari membuat object, tetapi setiap instance dimulai dengan keadaan yang sama. Object nyata membutuhkan data unik: seseorang memiliki nama tertentu, seorang pemain memiliki skor awal. Agar object berguna, konstruktor harus menerima argumen dan menetapkannya ke instance baru.

Berikut cara memperluas constructor agar menerima nilai awal:

local Dog = {}
Dog.__index = Dog

function Dog:new(name, breed)
    local instance = {}
    setmetatable(instance, self)
    instance.name = name
    instance.breed = breed
    return instance
end

function Dog:introduce()
    print("I am " .. self.name .. ", a " .. self.breed)
end

Constructor sekarang menerima name dan breed sebagai parameter. Setelah membuat instance kosong dan menetapkan metatable-nya, kita menetapkan nilai-nilai ini langsung ke field instance tersebut. Setiap object yang dibuat akan memiliki name dan breed sendiri.

local dog1 = Dog:new("Rex", "German Shepherd")
local dog2 = Dog:new("Bella", "Poodle")

dog1:introduce()  -- output: I am Rex, a German Shepherd
dog2:introduce()  -- output: I am Bella, a Poodle

Kedua anjing menggunakan method :introduce() yang sama dari prototype, tetapi masing-masing memiliki nama dan ras unik yang tersimpan di tabel instance-nya. Inilah kekuatan menggabungkan prototype dengan konstruktor berparameter: perilaku yang sama dengan state masing-masing.

challenge icon

Tantangan

Mudah

Mari kita buat class Person yang membuat individu unik dengan nama dan usia masing-masing. Kamu akan menyusun kodemu dalam dua file untuk berlatih menggunakan struktur module yang tepat.

Kamu akan membuat:

  • Person.lua: Definisikan class Person dengan constructor yang menerima nama dan usia. Sertakan method :introduce() agar setiap orang dapat memperkenalkan diri.
  • main.lua: Muat module Person dan buat instance person menggunakan input yang diberikan. Lalu, minta mereka memperkenalkan diri.

Constructor :new(name, age) harus menerima kedua nilai dan menyimpannya pada instance baru. Method :introduce() harus mencetak dengan format persis berikut:

Hello, my name is [name] and I am [age] years old

Kamu akan menerima dua input:

  1. Nama orang tersebut
  2. Usia orang tersebut

Misalnya, jika inputnya adalah Alice dan 25, outputnya harus seperti berikut:

Hello, my name is Alice and I am 25 years old

Coba sendiri

-- Muat module Person dengan require
local Person = require('Person')

-- Baca input
local name = io.read()
local age = io.read()

-- TODO: Buat instance Person baru menggunakan Person:new(name, age)

-- TODO: Panggil method introduce() pada instance Person milikmu
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