Roblox
Belajar Luau 04: Function, Parameter, return, dan Scope
Membungkus kode menjadi function di Luau: parameter, return dan multiple return, nilai default dengan or, scope variabel local, serta callback yang menjadi dasar event di Roblox.

Function adalah kumpulan kode yang diberi nama, supaya bisa dipanggil kapan saja tanpa menulis ulang kodenya. Function juga menjadi kunci memahami Roblox, karena hampir semua hal di Roblox terjadi lewat event yang memanggil function milikmu.
Jalankan di terminal:
luau 04-function.luau
Yang akan dipelajari
- Membuat dan memanggil function
- Parameter dan argumen
return, termasuk mengembalikan lebih dari satu nilai- Nilai default dengan
or - Scope: di mana variabel
local"terlihat" - Function sebagai nilai (callback)
Membuat dan memanggil function
local function sapa()
print("Halo, selamat datang di game!")
end
sapa() -- memanggil: tulis namanya + ()
sapa() -- bisa dipanggil berkali-kali
Parameter
Parameter adalah "lubang input" untuk function:
local function sapaPemain(nama)
print(`Halo, {nama}!`)
end
sapaPemain("Budi")
sapaPemain("Siti")
Parameter boleh lebih dari satu, dipisah koma. Kalau argumen tidak diisi, nilainya nil:
local function beriHadiah(nama, jumlahKoin)
print(`{nama} mendapat {jumlahKoin} koin`)
end
beriHadiah("Budi", 50)
beriHadiah("Siti") -- Siti mendapat nil koin
return
return mengembalikan hasil ke pemanggilnya:
local function hitungDamage(serangan, pertahanan)
local damage = serangan - pertahanan
if damage < 0 then
damage = 0 -- damage tidak boleh negatif
end
return damage
end
local hasil = hitungDamage(50, 20)
print("Damage:", hasil) -- 30
print("Damage:", hitungDamage(10, 40)) -- 0
Hasil return bisa langsung dipakai dalam perhitungan atau kondisi:
local darah = 100
darah -= hitungDamage(45, 15)
print("Darah sekarang:", darah) -- 70
return menghentikan function
Kode setelah return tidak dijalankan. Ini sering dipakai untuk "keluar lebih awal" kalau syarat tidak terpenuhi. Function juga boleh mengembalikan lebih dari satu nilai:
local function beliItem(koin, harga)
if koin < harga then
return false, koin -- gagal, koin tidak berubah
end
return true, koin - harga -- berhasil, kembalikan sisa koin
end
local berhasil, sisaKoin = beliItem(300, 250)
print("Berhasil:", berhasil, "Sisa koin:", sisaKoin) -- true 50
berhasil, sisaKoin = beliItem(100, 250)
print("Berhasil:", berhasil, "Sisa koin:", sisaKoin) -- false 100
Nilai default dengan or
Kalau parameter bernilai nil, pakai nilai cadangan:
local function buatPemain(nama, level)
nama = nama or "Tamu"
level = level or 1
print(`Pemain baru: {nama}, level {level}`)
end
buatPemain("Budi", 5)
buatPemain("Siti") -- level otomatis 1
buatPemain() -- Tamu, level 1
Scope
Variabel local hanya hidup di dalam blok tempat ia dibuat (function, if, for, dan sebagainya).
local skorGlobal = 0 -- dibuat di luar: bisa dipakai di mana saja di file ini
local function tambahSkor(jumlah)
local catatan = "skor ditambah" -- hanya hidup di dalam function ini
skorGlobal += jumlah -- boleh: skorGlobal dibuat di luar
print(catatan, skorGlobal)
end
tambahSkor(10)
tambahSkor(5)
print("Skor akhir:", skorGlobal) -- 15
-- print(catatan) -- nil! "catatan" tidak dikenal di luar function
Function yang memanggil function lain
Pecah masalah besar menjadi function-function kecil:
local function hitungXPDibutuhkan(level)
return level * 100
end
local function cekNaikLevel(level, xp)
local butuh = hitungXPDibutuhkan(level)
if xp >= butuh then
return level + 1, xp - butuh
end
return level, xp
end
local lvl, xp = cekNaikLevel(3, 350)
print(`Level {lvl}, sisa XP {xp}`) -- Level 4, sisa XP 50
Function sebagai nilai (callback)
Function bisa disimpan di variabel dan dikirim ke function lain. Ini sangat penting di Roblox.
local function ulangi(jumlah, aksi)
for i = 1, jumlah do
aksi(i)
end
end
ulangi(3, function(ke)
print(`Melompat ke-{ke}`)
end)
Catatan khusus Roblox
Di Roblox, hampir semua hal terjadi lewat event, dan event memanggil function yang kamu berikan (callback), persis seperti contoh di atas:
local function saatDisentuh(bagianLain)
print("Part disentuh oleh", bagianLain.Name)
end
part.Touched:Connect(saatDisentuh)
Artinya: "Roblox, tolong panggil function saatDisentuh setiap kali part ini disentuh." Event dibahas di pelajaran berikutnya.
Tips: selalu pakai
local function, bukanfunctionsaja. Lebih cepat dan lebih aman.
Latihan
-
Buat function
luasPersegi(sisi)yang me-return luas persegi. Print hasil untuk sisi 4 dan 7. -
Buat function
nilaiHuruf(skor)yang me-return "A"/"B"/"C"/"D" (aturan sama seperti latihan pelajaran 02). Pakaireturndi setiap cabang. Panggil untuk skor 95, 80, 65, dan 40. -
Buat function
serang(darah, damage, pakaiPerisai):- kalau
pakaiPerisaibernilaitrue, damage dibagi 2; - darah tidak boleh di bawah 0;
- return darah yang baru dan boolean apakah pemain sudah kalah.
Uji dengan
serang(100, 30, false),serang(100, 30, true), danserang(20, 50, false). - kalau
-
Buat function
hitungMundur(dari, aksiSelesai)yang mencetak angka mundur daridarisampai 1, lalu memanggil functionaksiSelesai. Panggil dengan function yang mencetak "BOOM!".
Kunci jawaban
Coba kerjakan sendiri dulu sebelum membaca bagian ini.
Latihan 1: luas persegi
local function luasPersegi(sisi)
return sisi * sisi
end
print("Luas sisi 4:", luasPersegi(4)) -- 16
print("Luas sisi 7:", luasPersegi(7)) -- 49
Latihan 2: nilai huruf dengan return
local function nilaiHuruf(skor)
if skor >= 90 then
return "A"
elseif skor >= 75 then
return "B"
elseif skor >= 60 then
return "C"
end
return "D" -- tidak perlu "else": kalau sampai sini, pasti D
end
print(nilaiHuruf(95), nilaiHuruf(80), nilaiHuruf(65), nilaiHuruf(40)) -- A B C D
Latihan 3: serang dengan dua nilai return
local function serang(darah, damage, pakaiPerisai)
if pakaiPerisai then
damage = damage / 2
end
local darahBaru = math.max(darah - damage, 0) -- tidak boleh di bawah 0
local kalah = darahBaru == 0
return darahBaru, kalah
end
local d1, k1 = serang(100, 30, false)
print("Tanpa perisai:", d1, k1) -- 70 false
local d2, k2 = serang(100, 30, true)
print("Pakai perisai:", d2, k2) -- 85 false
local d3, k3 = serang(20, 50, false)
print("Darah tipis:", d3, k3) -- 0 true
math.max(a, b) mengambil nilai yang lebih besar. Alternatif tanpa math.max:
local darahBaru = darah - damage
if darahBaru < 0 then darahBaru = 0 end
Latihan 4: hitung mundur dengan callback
local function hitungMundur(dari, aksiSelesai)
for i = dari, 1, -1 do
print(i)
end
aksiSelesai() -- panggil function yang dikirim
end
hitungMundur(3, function()
print("BOOM!")
end)
Function yang dikirim juga bisa berupa function bernama:
local function ledakan()
print("BOOM! (versi function bernama)")
end
hitungMundur(2, ledakan) -- tanpa () -> mengirim function-nya, bukan memanggilnya
Discussion (0)
We store your optional name, your comment, and technical hashes (not your raw IP address) to prevent spam. A functional cookie lets you edit or delete your own comments from this browser. To request deletion, use the contact page.
No comments yet. Start the discussion.