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 tabelSaat 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 berfungsiKedua 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.
Tantangan
MudahBuat tabel bernama player dengan field score yang diinisialisasi dengan 0.
Tambahkan dua fungsi ke tabel:
player.setScore(self, value)- didefinisikan dengan sintaks titik dan parameterselfyang dinyatakan secara eksplisit. Menetapkanself.scoreke nilai yang diberikan.player:addBonus(amount)- didefinisikan dengan sintaks titik dua. Menambahkanamountkeself.score.
Kamu akan menerima dua input:
- Nilai skor awal
- Jumlah bonus yang akan ditambahkan
Lakukan langkah-langkah berikut:
- Panggil
setScoremenggunakan sintaks titik (dengan meneruskan tabel sebagai argumen pertama) untuk menetapkan skor awal - Panggil
addBonusmenggunakan sintaks titik dua untuk menambahkan bonus - 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)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