Menu
CoddyTech

Titik vs Titik Dua

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

Sekarang kamu sudah memahami sintaks titik dan titik dua. Berikut kaitan keduanya dan hal yang salah saat tabel tidak diteruskan.

Kedua titik dua merupakan bentuk singkat. Mendefinisikan function game:addPoints(points) sama dengan mendefinisikan function game.addPoints(self, points), dan memanggil game:addPoints(10) sama dengan memanggil game.addPoints(game, 10). Sebuah method berfungsi selama tabel diteruskan sebagai argumen pertamanya.

Inilah yang terjadi saat tabel tidak diteruskan:

local game = { score = 0 }

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

-- SALAH: pemanggilan memakai 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, dan self.score gagal karena 10 adalah angka, bukan tabel.

Fungsi yang didefinisikan dengan titik dan self eksplisit berfungsi dengan pemanggilan titik dua, karena titik dua meneruskan tabel sebagai argumen pertama:

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

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

Kedua definisi membuat fungsi yang sama, jadi pilihannya mengikuti konvensi: gunakan titik dua untuk mendefinisikan dan memanggil fungsi yang bekerja dengan self, dan titik untuk fungsi yang tidak menggunakan self. Dengan begitu, setiap pemanggilan menunjukkan apakah tabel diteruskan.

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 dinyatakan secara 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 itu 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 eksplisit
-- 3. Tambahkan player:addBonus(amount) menggunakan sintaks titik dua
-- 4. Panggil setScore menggunakan sintaks titik (dengan tabel sebagai argumen pertama)
-- 5. Panggil addBonus menggunakan sintaks titik dua


-- Tampilkan skor akhir sebagai output
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