21. Fungsi — Solusi PR
File solusi .lua ada di
exercises/21/homework/solutions/.
Soal 1 — Greet
Soal. Sebuah fungsi greet(name) yang
mencetak salam, dipanggil tiga kali.
Cara memikirkannya. Satu parameter, satu baris
print; pemanggil mengoper sebuah string setiap kali
memanggil fungsi.
Solusi.
local function greet(name)
print("Hello, " .. name .. "!")
end
greet("Keiko")
greet("Roblox")
greet("World")Kesalahan umum.
- Lupa menulis
local. Tanpanya,greetmenjadi variabel global. Tetap berjalan, tapi kebiasaan yang salah. - Salah menempatkan
end. Setiapfunctionbutuhendyang sepadan; indentasi tubuh fungsi agar mudah dilihat.
Soal 2 — is_even
Soal. Kembalikan true atau
false dari n % 2 == 0. Tidak ada
print di dalam fungsi.
Cara memikirkannya. n % 2 == 0 sudah
merupakan boolean. return langsung saja; biarkan pemanggil
yang mencetaknya.
Solusi.
local function is_even(n)
return n % 2 == 0
end
print(is_even(4)) -- true
print(is_even(7)) -- false
print(is_even(0)) -- true
print(is_even(-2)) -- trueSatu baris itu adalah seluruh isi fungsinya: Lua menghitung
n % 2, lalu ... == 0, dan mengembalikan
boolean-nya.
Kesalahan umum.
Menulis fungsi seperti ini:
if n % 2 == 0 then return true else return false endEmpat baris untuk apa yang satu baris di atas sudah lakukan.
n % 2 == 0sudah boolean.
Soal 3 — Clamp
Soal. clamp(x, lo, hi) mengembalikan
x yang dibatasi oleh lo dan
hi.
Cara memikirkannya. Dua pengecekan di awal menangani
kasus di luar rentang; selain itu kembalikan x apa
adanya.
Solusi.
local function clamp(x, lo, hi)
if x < lo then
return lo
end
if x > hi then
return hi
end
return x
end
print(clamp(5, 0, 10)) -- 5
print(clamp(-3, 0, 10)) -- 0
print(clamp(99, 0, 10)) -- 10Dua blok if bersifat independen karena masing-masing
langsung return: yang pertama terpicu akan langsung keluar
dari fungsi. Jika tidak ada yang terpicu, return x yang
dijalankan.
Kesalahan umum.
- Mengira
clamp(99, 0, 10)hasilnya99. Dibatasi oleh memaksa keluaran berada di dalam rentang, sehingga hasilnya10.
Tantangan — Swap
Soal. Sebuah fungsi yang mengembalikan dua nilai dalam posisi tertukar, ditambah pemanggilan dengan multi-assignment.
Cara memikirkannya. Isi fungsinya cukup satu baris:
return b, a. Pemanggil menulis
x, y = swap(x, y) untuk menerima keduanya sekaligus.
Solusi.
local function swap(a, b)
return b, a
end
local x = 1
local y = 2
print("Before: x=" .. x .. " y=" .. y)
x, y = swap(x, y)
print("After: x=" .. x .. " y=" .. y)Keluaran:
Before: x=1 y=2
After: x=2 y=1
Trik a, b = b, a yang sama dari bab 11, dibungkus dalam
sebuah fungsi. Tidak menambah kemampuan baru, tapi memberi operasi
tersebut sebuah nama yang membuat kode pemanggil lebih
jelas.
Kesalahan umum.
- Menulis
x, y = swap(x, y), 0atau ekspresi tambahan lainnya. Pemanggilan multi-kembalian di tengah daftar dipotong menjadi satu nilai: hanya kembalian pertama yang sampai kex,0diberikan key, kembalian kedua hilang. Agar keduanya bisa digunakan, pemanggilan fungsi harus menjadi ekspresi terakhir dalam assignment.
Selesai?
Dua bab berikutnya membahas tabel, struktur di balik segalanya mulai dari daftar hingga pohon objek Roblox. Lalu modul untuk memisahkan kode ke beberapa file, dan mini-proyek Bagian 5: petualangan berbasis teks.