'self' Eksplisit
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan Lua di Coddy. Pelajaran 2 dari 70.
Ketika sebuah fungsi berada di dalam tabel, fungsi itu sering perlu mengakses atau mengubah data di dalam tabel yang sama. Namun, inilah masalahnya: bagaimana fungsi itu tahu tabel mana yang menjadi tempatnya?
Solusinya adalah meneruskan tabel secara eksplisit sebagai argumen pertama ke fungsi. Sesuai konvensi, parameter ini diberi nama self:
local counter = {
value = 0
}
function counter.increment(self)
self.value = self.value + 1
end
counter.increment(counter)
print(counter.value) -- output: 1Perhatikan bahwa kita memanggil counter.increment(counter), dengan meneruskan tabel itu sendiri sebagai argumen. Di dalam fungsi, self kini merujuk ke tabel tersebut, sehingga kita dapat membaca dan mengubah self.value.
Pola ini penting karena memungkinkan fungsi bekerja dengan data tabel tanpa menetapkan nama tabel secara langsung. Perhatikan fungsi yang mengatur ulang lalu mengembalikan jumlah saat ini:
function counter.reset(self)
local old = self.value
self.value = 0
return old
end
print(counter.reset(counter)) -- output: 1
print(counter.value) -- output: 0Meski meneruskan tabel secara manual bisa dilakukan, cara ini terasa berulang. Di pelajaran berikutnya, kamu akan mempelajari sintaks yang lebih ringkas dan menangani ini secara otomatis.
Tantangan
MudahBuat tabel bernama tracker dengan field count yang diinisialisasi dengan 0.
Tambahkan fungsi tracker.addAmount(self, amount) yang:
- Menerima
self(tabel) sebagai parameter pertama - Menerima
amountsebagai parameter kedua - Menambahkan
amountkeself.count
Kamu akan menerima dua input:
- Jumlah pertama yang akan ditambahkan
- Jumlah kedua yang akan ditambahkan
Panggil tracker.addAmount dua kali (sekali untuk setiap input), dengan meneruskan tabel sebagai argumen pertama setiap kali. Setelah kedua pemanggilan, cetak nilai akhir tracker.count.
Coba sendiri
-- Baca input
local amount1 = tonumber(io.read())
local amount2 = tonumber(io.read())
-- TODO: Tulis kodemu di bawah ini
-- Buat tabel bernama 'tracker' dengan field 'count' yang diinisialisasi ke 0
-- Tambahkan fungsi tracker.addAmount(self, amount) yang menambahkan amount ke self.count
-- Panggil tracker.addAmount dua kali dengan tabel sebagai argumen pertama
-- Tampilkan nilai akhir count sebagai output
print(tracker.count)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