Konvensi Penamaan
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan Lua di Coddy. Pelajaran 43 dari 70.
Di Lua, semua field tabel dapat diakses publik secara default. Siapa pun dapat membaca atau mengubah self.health secara langsung. Meskipun Lua tidak menerapkan privasi, programmer menggunakan konvensi penamaan untuk menyampaikan maksud: menandai field mana yang sebaiknya dianggap sebagai detail implementasi internal.
Konvensi standar adalah menambahkan garis bawah di awal field privat:
local Player = {}
Player.__index = Player
function Player:new(name)
local obj = {
name = name, -- Publik: boleh diakses langsung
_health = 100, -- Privat: gunakan method sebagai gantinya
_score = 0 -- Privat: pelacakan internal
}
setmetatable(obj, Player)
return obj
end
function Player:getHealth()
return self._health
end
function Player:takeDamage(amount)
self._health = self._health - amount
endGaris bawah tidak mengubah cara kerja Lua: player._health secara teknis tetap bisa diakses. Namun, garis bawah berfungsi sebagai peringatan yang jelas bagi programmer lain (dan dirimu di masa depan): "Field ini seharusnya bersifat privat. Akses melalui method saja."
Konvensi ini penting karena memisahkan antarmuka (apa yang seharusnya digunakan orang lain) dari implementasi (cara kerjanya secara internal). Jika nanti kamu perlu menambahkan validasi atau mengubah cara kesehatan disimpan, kamu hanya perlu mengubah method: kode yang menggunakan :getHealth() tetap berfungsi tanpa perubahan.
Tantangan
MudahMari buat class BankAccount yang dengan tepat menandai field mana yang dimaksudkan sebagai private menggunakan konvensi penamaan garis bawah!
Kamu akan menyusun kodemu dalam dua file:
BankAccount.lua: Buat class yang mengelola informasi akun. Constructor:new(ownerName, initialBalance)harus menyimpan nama pemilik sebagai field publik (owner) dan saldo sebagai field private (_balance). Sertakan tiga method::getBalance(): mengembalikan saldo saat ini:deposit(amount): menambahkan jumlah tersebut ke_balance:getOwner(): mengembalikan nama pemilik
main.lua: Muat module BankAccount, baca nama pemilik, saldo awal, dan jumlah setoran dari input. Buat akun, lakukan setoran, lalu cetak nama pemilik dan saldo akhir.
Kamu akan menerima tiga input:
- Nama pemilik
- Saldo awal (sebuah angka)
- Jumlah setoran (sebuah angka)
Output-mu harus terdiri dari dua baris yang menampilkan nama pemilik dan saldo akhir setelah setoran:
Owner: {ownerName}
Balance: {finalBalance}Misalnya, jika input-nya adalah Maria, 500, dan 150, output-nya harus seperti berikut:
Owner: Maria
Balance: 650Ingat: awalan garis bawah pada _balance menandakan kepada programmer lain bahwa field ini sebaiknya diakses melalui method seperti :getBalance() dan :deposit(), bukan secara langsung. Field owner tanpa garis bawah menandakan bahwa field ini boleh diakses secara publik.
Coba sendiri
-- Muat module BankAccount dengan require
local BankAccount = require('BankAccount')
-- Baca input
local ownerName = io.read()
local initialBalance = tonumber(io.read())
local depositAmount = tonumber(io.read())
-- TODO: Buat BankAccount baru dengan ownerName dan initialBalance
-- TODO: Lakukan setoran menggunakan depositAmount
-- TODO: Cetak pemilik dan saldo akhir dalam format yang diminta
-- Format:
-- Pemilik: {ownerName}
-- Saldo: {finalBalance}
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