Menu
CoddyTech

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
end

Garis 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.

challenge icon

Tantangan

Mudah

Mari 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:

  1. Nama pemilik
  2. Saldo awal (sebuah angka)
  3. 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: 650

Ingat: 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}
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