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)
endConstructor 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 PoodleKedua 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.
Tantangan
MudahMari 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 classPersondengan 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 oldKamu akan menerima dua input:
- Nama orang tersebut
- Usia orang tersebut
Misalnya, jika inputnya adalah Alice dan 25, outputnya harus seperti berikut:
Hello, my name is Alice and I am 25 years oldCoba 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
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