Menu
CoddyTech

Titik vs Titik Dua

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

Sekarang setelah kamu memahami sintaks titik dan titik dua, penting untuk memahami kapan menggunakan masing-masing dan apa yang terjadi jika kamu mencampurnya dengan cara yang keliru.

Aturan utamanya sederhana: cara kamu mendefinisikan fungsi harus sesuai dengan cara kamu memanggilnya. Jika kamu mendefinisikannya dengan titik dua, panggil dengan titik dua. Jika kamu mendefinisikannya dengan titik dan self eksplisit, panggil dengan titik dan teruskan tabelnya.

Inilah yang terjadi saat kamu mencocokkan keduanya dengan tidak tepat:

local game = { score = 0 }

function game:addPoints(points)
    self.score = self.score + points
end

-- SALAH: memanggil dengan titik, tetapi tidak meneruskan tabel
game.addPoints(10)  -- error! self sekarang bernilai 10, bukan tabel

Saat kamu memanggil game.addPoints(10), Lua tidak otomatis meneruskan game. Nilai 10 menjadi self, sehingga menyebabkan perilaku yang tidak terduga atau error.

Arah sebaliknya lebih mudah ditoleransi:

function game.reset(self)
    self.score = 0
end

-- Memanggil dengan tanda titik dua: game:reset() sama dengan game.reset(game)
game:reset()  -- self menerima game dengan benar, jadi ini berfungsi

Meski kasus khusus ini mungkin berhasil, hal ini menimbulkan kebingungan dan dapat merusak fungsi yang mengharapkan argumen tertentu. Cara paling aman adalah tetap konsisten: gunakan titik dua untuk definisi dan pemanggilan jika fungsi memerlukan self, dan gunakan titik jika tidak.

challenge icon

Tantangan

Mudah

Buat tabel bernama player dengan field score yang diinisialisasi dengan 0.

Tambahkan dua fungsi ke tabel:

  1. player.setScore(self, value) - didefinisikan dengan sintaks titik dan parameter self yang eksplisit. Menetapkan self.score ke nilai yang diberikan.
  2. player:addBonus(amount) - didefinisikan dengan sintaks titik dua. Menambahkan amount ke self.score.

Kamu akan menerima dua input:

  1. Nilai skor awal
  2. Jumlah bonus yang akan ditambahkan

Lakukan langkah-langkah berikut:

  1. Panggil setScore menggunakan sintaks titik (dengan meneruskan tabel sebagai argumen pertama) untuk menetapkan skor awal
  2. Panggil addBonus menggunakan sintaks titik dua untuk menambahkan bonus
  3. Cetak nilai akhir player.score

Ingat: sesuaikan cara kamu memanggil setiap fungsi dengan cara fungsi tersebut didefinisikan.

Coba sendiri

-- Baca input
local initialScore = tonumber(io.read())
local bonusAmount = tonumber(io.read())

-- TODO: Tulis kodemu di bawah ini
-- 1. Buat tabel bernama 'player' dengan field 'score' yang diinisialisasi ke 0
-- 2. Tambahkan player.setScore(self, value) menggunakan sintaks titik dengan self yang ditulis secara eksplisit
-- 3. Tambahkan player:addBonus(amount) menggunakan sintaks titik dua
-- 4. Panggil setScore menggunakan sintaks titik (dengan meneruskan tabel sebagai argumen pertama)
-- 5. Panggil addBonus menggunakan sintaks titik dua


-- Tampilkan nilai akhir score
print(player.score)
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