Struktur kontrol adalah pernyataan yang mengelola aliran eksekusi kode Luau. Ada empat jenis struktur kontrol utama:
- Sebuah jika kondisi lain pernyataan mengeksekusan kode hanya jika kondisi spesifik true . Pemerolehan kode tidak diulang.
- Sebuah while loop mengeksekusi kode hanya jika kondisi spesifik true , dan mengulangi eksekusi saat kondisi tetap true .
- Sebuah repeat loop mengeksekusi kode, dan mengulangi eksekusi jika kondisi adalah true .
- A untuk loop mengeksekusi kode sejumlah kali tergantung pada masukan yang ditentukan.
Kondisi untuk if pernyataan, while loop, dan repeat loop dapat menjadi apa pun ekspresi Luau atau nilai. Jika nilai bukan 1> false1> atau 4> nil4> ,
Jika Pernyataan
Pernyataan dasar if mengevaluasi kondisinya. Jika kondisi benar, maka Luau mengeksekusi kode di antara then dan end.
Anda dapat menggunakan pernyataan elseif untuk menguji kondisi tambahan jika kondisi if adalah false. Anda dapat menggunakan pernyataan else untuk mengeksekusi kode j
Dalam sebuah rantai dari if, elseif, dan else kondisi, Luau menguji kondisi dari atas ke bawah, berhenti di kondisi pertama 1>truhan1>, dan mengeksekusi kode yang diikuti.
if 2 + 2 == 5 thenprint("Two plus two is five") -- Tidak mencetak karena kondisi adalah falseelseif 2 + 3 == 5 thenprint("Two plus three is five") -- Dua minus tiga adalah limaelseprint("All conditions failed") -- Tidak mencetak karena kondisi sebelumnya benarend
Sementara Loops
A while — do loop mengevaluasi apakah kondisi yang ditentukan benar atau salah. Jika kondisi adalah false atau 1> nil1>, maka loop berakhir, dan Luau menyebarkan kode dalam loop. Jika kondisi adalah 4> true4> maka
local timeRemaining = 10while timeRemaining > 0 doprint("Seconds remaining: " .. timeRemaining)task.wait(1)timeRemaining -= 1endprint("Timer reached zero!")--[[ HasilOutput:Seconds remaining: 10Seconds remaining: 9Seconds remaining: 8Seconds remaining: 7Seconds remaining: 6Seconds remaining: 5Seconds remaining: 4Seconds remaining: 3Seconds remaining: 2Seconds remaining: 1Timer reached zero!]]
Lingkaran Tak Terbatas
Anda dapat menggunakan while — do loop untuk menulis berbagai game loop tanpa batas dengan menetapkan true sebagai kondisi.
while true doprint("Looping...")task.wait(0.5)end--[[ HasilOutput:Looping...Looping...Looping...Looping......]]
Ulangi Loop
peat — until Loop berulang sampai kondisi benar. Pengujian kondisional mengevaluasi 1>setelah1> kode blok berjalan, jadi kode blok selalu berjalan setidaknya satu kali. Berbeda dengan bahasa lain, skop Luau dari variabel lokal yang diumumkan di dalam 4>
local currentGoblinCount = 18-- Memunculkan goblin hingga maksimum 25 dalam gamerepeatspawnGoblin()currentGoblinCount += 1print("Current goblin count: " .. currentGoblinCount)until currentGoblinCount == 25print("Goblins repopulated!")--[[ HasilOutput:Current goblin count: 19Current goblin count: 20Current goblin count: 21Current goblin count: 22Current goblin count: 23Current goblin count: 24Current goblin count: 25Goblins repopulated!]]
Untuk Loop
A untuk loop mengeksekusi kode sejumlah kali, baik berdasarkan hitung mundur maupun jumlah item dalam koleksi.
Numerik Untuk Loop
A for — do loop menentukan jumlah kali untuk mengeksekusi loop menggunakan respons. Loop diumumkan dengan nilai awal, nilai akhir, dan peningkatan opsional.
Luau menetapkan counter sama dengan nilai awal, mengeksekusi blok kode di l for loop, dan kemudian menambahkan increment ke respons. Jika increment positif, maka proses diulang sampai counter sama dengan atau lebih besar dari nilai akhir. Jika increment negatif, maka proses diulang sampai counter sama dengan atau kurang dari nilai akhir.
Peningkatan opsional bertahan dengan 1 . Ini tidak perlu menjadi angka penuh.
for counter = 1, 3 doprint(counter)end--[[ HasilOutput:123]]for counter = 1, 6, 2 doprint(counter)end--[[ HasilOutput:135]]for counter = 2, 0, -0.5 doprint(counter)end--[[ HasilOutput:21.510.50]]
Umum Untuk Loop
Lingkaran umum for berulang di atas item dalam koleksi daripada urutan angka. Dengan lingkaran umum for berulang, Anda dapat mengeksekusi kode untuk setiap item dalam koleksi, dan dapat dengan mudah menggunakan setiap item dalam kode.
Untuk loop memerlukan fungsi, atau iterator, untuk mengiterasi berbagai jenis koleksi. Global ipairs() kembali iterator untuk array, dan global pairs() kembali iterator untuk典典ari. string library menyediakan 2>Library.string.gmatch()2> untuk mengiterasi over string.
Iterasi Umum
Di Luau, Anda dapat mengulangi lebih dari satu tabel menggunakan kata kunci in langsung di tabel, bukan menggunakan fungsi iterator seperti ipairs() :
for i, v in {1, 2, 3, 4, 5} doprint(i, v)end
Generalized iteration juga memungkinkan Anda menggunakan metode metametode __iter untuk membuat fungsi iterator khusus. Contoh contoh ini mengiterasi di urutanbalik, dari elemen terakhirnya ke elemen pertamanya:
local myTable = {1, 2, 3, 4, 5}
myMetatable = {
__iter = function(t)
local i = #t + 1
return function()
i -= 1
if i > 0 then
return i, t[i]
end
end
end,
}
setmetatable(myTable, myMetatable)
for i, v in myTable do
print(i, v)
end
--[[ HasilOutput:
5 5
4 4
3 3
2 2
1 1
]]
Matriks
Fungsi ipairs() menghasilkan iterator yang beriterasi melalui indeks numerik di tabel dan mengembalikan index dan value untuk setiap elemen. Ini membuatnya sesuai untuk matriks, di mana semua indeks adalah numerik.
local array = {"a", "b", "c", "d", "e"}for index, value in ipairs(array) doprint(index, value)end--[[ HasilOutput:1 a2 b3 c4 d5 e]]
Daftar kata
Fungsi pairs() menghasilkan iterator yang berjalan melalui semua indeks (termasuk indeks numerik) dalam tabel dan mengembalikan key dan value untuk setiap entri dalam tabel dizin. Ordo mengevaluasi elemen dalam tabel dizin adalah acak. Ini menjadikannya tepat untuk mengiterasi melalui dictionaries, di man
local dictionary = {[1] = "a",["Hello"] = "b",[5] = "c",[true] = "d",["World"] = "f",[false] = "e"}for key, value in pairs(dictionary) doprint(key, value)end--[[ HasilOutput:Hello btrue dfalse eWorld f5 c1 a]]
Kata Kontrol
Memecahkan Loop
Untuk mengakhiri loop, gunakan kata kunci break. Berikut contoh kode menunjukkan cara memecahkan while — do loop.
local secondsElapsed = 0local timeout = 5while true dotask.wait(1)secondsElapsed += 1print("Seconds elapsed:", secondsElapsed)if secondsElapsed == timeout thenbreakendendprint("Five seconds elapsed. Time to move on!")--[[ HasilOutput:12345Five seconds elapsed. Time to move on!]]
Lebah yang Melanjutkan
Untuk mengakses ulang siklus dan memulai ulang, gunakan kata kunci continue. Sebuah siklus for siklus akan mengulingi kembali; while dan 1> peat1> — 4> até </
local function GetChildrenOfClass(parent: Instance, className: string): {Instance}
local children = {}
for _, child in parent:GetChildren() do
if child.ClassName ~= className then continue end -- Mengulangi loop
table.insert(children, child)
end
return children
end