Getter method
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan Lua di Coddy. Pelajaran 13 dari 70.
Kamu sudah belajar menyimpan data dalam variabel instans seperti self.health atau self.items. Meskipun kamu bisa mengakses field ini secara langsung dari luar object, ada cara yang lebih rapi: menggunakan method getter.
Getter (juga disebut method accessor) adalah method sederhana yang mengembalikan nilai internal. Alih-alih mengakses player.health secara langsung, kamu memanggil player:getHealth():
local Player = {}
Player.__index = Player
function Player:new(name)
local instance = {}
setmetatable(instance, self)
instance.name = name
instance.health = 100
return instance
end
function Player:getHealth()
return self.health
end
function Player:getName()
return self.name
endMengapa perlu method tambahan? Getter menyediakan titik akses terkontrol ke datamu.
Saat ini, :getHealth() hanya mengembalikan nilai. Namun nanti, kamu mungkin ingin menambahkan logika: mungkin mengembalikan "Critical" jika health turun di bawah 10, atau mencatat setiap kali health diperiksa.
Dengan getter, kamu bisa membuat perubahan ini tanpa mengubah kode apa pun yang menggunakan object tersebut.
local hero = Player:new("Luna")
print(hero:getHealth()) -- output: 100
print(hero:getName()) -- output: LunaPola ini menciptakan batas yang jelas antara struktur internal object dan cara kode lain berinteraksi dengannya. Kode di luar object meminta data melalui method, bukan mengakses field object secara langsung.
Tantangan
MudahMari buat class Player yang menggunakan method getter untuk mengakses data internalnya. Alih-alih mengakses field pemain secara langsung, kamu akan membuat method yang memberikan akses terkontrol ke informasi pemain.
Kamu akan menyusun kodemu dalam dua file:
Player.lua: Definisikan classPlayerdengan pola prototipe standar. Constructor harus menerima nama dan menginisialisasi health ke100. Tambahkan tiga method getter::getName()mengembalikan nama pemain:getHealth()mengembalikan health pemain saat ini:getStatus()mengembalikan string berformat yang menggabungkan kedua informasi tersebut
main.lua: Muat module Player dan buat sebuah instance pemain. Gunakan method getter untuk menampilkan informasi pemain: akses semuanya melalui method, bukan dengan membaca field secara langsung.
Method :getStatus() harus mengembalikan string dengan format persis seperti ini:
[name] has [health] HPKamu akan menerima satu input: nama pemain.
Di file utama, buat pemain dengan nama yang diberikan, lalu cetak tiga baris menggunakan method getter:
- Nama pemain (menggunakan
:getName()) - Health pemain (menggunakan
:getHealth()) - Status lengkap pemain (menggunakan
:getStatus())
Contohnya, jika input-nya adalah Luna, output-nya akan seperti ini:
Luna
100
Luna has 100 HPCoba sendiri
-- Muat module Player dengan require
local Player = require('Player')
-- Baca input
local name = io.read()
-- TODO: Buat instance pemain dengan nama yang diberikan
-- TODO: Cetak nama pemain menggunakan :getName()
-- TODO: Cetak kesehatan pemain menggunakan :getHealth()
-- TODO: Cetak status pemain menggunakan :getStatus()
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