Menu
CoddyTech

'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: 1

Perhatikan 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: 0

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

challenge icon

Tantangan

Mudah

Buat tabel bernama tracker dengan field count yang diinisialisasi dengan 0.

Tambahkan fungsi tracker.addAmount(self, amount) yang:

  • Menerima self (tabel) sebagai parameter pertama
  • Menerima amount sebagai parameter kedua
  • Menambahkan amount ke self.count

Kamu akan menerima dua input:

  1. Jumlah pertama yang akan ditambahkan
  2. 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)
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