28. Banyak objek sekaligus — Solusi PR
File solusi ada di exercises/28/homework/solutions/.
Keempat soal menggunakan class Hero kecil yang sama dari
bagian atas masing-masing file starter.
Soal 1 — Regu para pahlawan
Soal. Buat daftar tiga pahlawan lalu cetak masing-masing.
Solusi.
local party = {
Hero.new("Ada", 100),
Hero.new("Ben", 80),
Hero.new("Cara", 120),
}
for _, h in ipairs(party) do
print(h.name .. ": " .. h.hp .. " HP")
endKeluaran:
Ada: 100 HP
Ben: 80 HP
Cara: 120 HP
Soal 2 — Total HP
Soal. Jumlahkan HP semua anggota regu.
Solusi.
local total = 0
for _, h in ipairs(party) do
total = total + h.hp
end
print("Team HP: " .. total) -- Team HP: 300Ini adalah pola akumulasi dari Bab 20, hanya saja sekarang kita membaca sebuah field alih-alih angka biasa.
Soal 3 — Siapa yang terluka?
Soal. Cetak setiap pahlawan yang hp-nya
di bawah max_hp mereka.
Solusi.
for _, h in ipairs(party) do
if h.hp < h.max_hp then
print(h.name .. " is hurt.")
end
endHanya pahlawan yang sudah menerima kerusakan yang dicetak. Pernyataan
if membandingkan dua field dari objek yang
sama.
Tantangan — Pahlawan terkuat
Soal. Temukan pahlawan dengan HP terbanyak.
Cara memikirkannya. Akumulasikan sebuah nilai
maksimum: simpan sebuah variabel untuk pahlawan terbaik sejauh ini, lalu
ganti setiap kali ada yang lebih kuat. Mulai dengan pahlawan pertama
(atau nil yang diisi pada giliran pertama).
Solusi.
local strongest = party[1]
for _, h in ipairs(party) do
if h.hp > strongest.hp then
strongest = h
end
end
print("Strongest: " .. strongest.name) -- Strongest: CaraKesalahan umum.
- Memulai
strongestdengannil, lalu menulish.hp > strongest.hppada giliran pertama akan mencoba membacanil.hpdan menghasilkan error. Mulailah dengan pahlawan pertama, atau tangani giliran pertama secara khusus.
Selesai?
Kamu sekarang bisa mengelola seluruh koleksi objek menggunakan perulangan yang sudah kamu kuasai. Selanjutnya, Pewarisan lebih dalam memungkinkan satu class dibangun di atas class lain, sehingga perilaku yang sama cukup ditulis sekali saja.