Struktur kontrol

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Struktur kontrol adalah pernyataan yang mengelola aliran eksekusi kode Luau. Ada empat jenis struktur kontrol utama:

  • Sebuah pernyataan jika kemudian lainnya melaksanakan kode hanya jika kondisi yang ditentukan adalah true . Eksekusi kode tidak diulang.
  • Sebuah while loop mengeksekusi kode hanya jika kondisi yang ditentukan adalah true , dan mengulangi eksekusi sementara kondisi tetap true .
  • Sebuah lingkaran berulang mengeksekusi kode, dan mengulang eksekusi jika kondisinya adalah true .
  • A untuk loop mengeksekusi kode sejumlah kali tertentu tergantung pada input yang ditentukan.

Kondisi untuk pernyataan if , loop while , dan loop repeat dapat menjadi ekspresi atau nilai Luau apa pun.Jika nilai tidak false atau nil , maka Luau mengevaluasinya sebagai true dalam pernyataan kondicional.Tidak seperti bahasa skrip lain, Luau menganggap kedua nol dan string kosong sebagai true .

Jika pernyataan

Pernyataan dasar if menguji 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 salah.Anda dapat menggunakan pernyataan else untuk mengeksekusi kode jika semua if dan elseif kondisi gagal.Bagian elseif dan else adalah keduanya opsional, tetapi Anda tidak dapat menggunakan salah satu tanpa pernyataan awal if .

Dalam rantai if , elseif , dan else kondisi, Luau menguji kondisi dari atas ke bawah, berhenti di kondisi pertama true , dan mengeksekusi kode yang mengikutinya.


if 2 + 2 == 5 then
print("Two plus two is five") -- Tidak mencetak karena kondisinya salah
elseif 2 + 3 == 5 then
print("Two plus three is five") -- Dua ditambah tiga adalah lima
else
print("All conditions failed") -- Tidak mencetak karena kondisi sebelumnya benar
end

Sementara loop

Sebuah loop whiledo mengevaluasi apakah kondisi yang ditentukan benar atau salah.Jika kondisinya adalah false atau nil , maka loop berakhir, dan Luau melewati kode di loop.Jika kondisi adalah true , maka Luau mengeksekusi kode dalam loop dan mengulangi prosesnya.


local timeRemaining = 10
while timeRemaining > 0 do
print("Seconds remaining: " .. timeRemaining)
task.wait(1)
timeRemaining -= 1
end
print("Timer reached zero!")
--[[ Hasil keluaran:
Seconds remaining: 10
Seconds remaining: 9
Seconds remaining: 8
Seconds remaining: 7
Seconds remaining: 6
Seconds remaining: 5
Seconds remaining: 4
Seconds remaining: 3
Seconds remaining: 2
Seconds remaining: 1
Timer reached zero!
]]

Lingkaran tak terbatas

Anda dapat menggunakan loop whiledo untuk menulis loop permainan tak terbatas dengan menetapkan true sebagai kondisi.


while true do
print("Looping...")
task.wait(0.5)
end
--[[ Hasil keluaran:
Looping...
Looping...
Looping...
Looping...
...
]]

Ulangi loop

The repeatuntil loop berulang sampai kondisi benar.Tes kondisional mengevaluasi setelah blok kode dijalankan, sehingga blok kode selalu dijalankan setidaknya sekali.Tidak seperti bahasa lain, cakupan Luau dari variabel lokal yang dideklarasikan di dalam loop repeat - until termasuk kondisi.


local currentGoblinCount = 18
-- Memunculkan goblin hingga maksimal 25 di game
repeat
spawnGoblin()
currentGoblinCount += 1
print("Current goblin count: " .. currentGoblinCount)
until currentGoblinCount == 25
print("Goblins repopulated!")
--[[ Hasil keluaran:
Current goblin count: 19
Current goblin count: 20
Current goblin count: 21
Current goblin count: 22
Current goblin count: 23
Current goblin count: 24
Current goblin count: 25
Goblins repopulated!
]]

Untuk loop

A untuk loop mengeksekusi kode sejumlah kali, baik berdasarkan hitungan numerik counter atau jumlah item di koleksi.

Numerik untuk loop

Sebuah loop fordo menentukan jumlah kali untuk mengeksekusi loop menggunakan respons.Lingkaran dideklarasikan dengan nilai awal, nilai akhir, dan peningkatan opsional.

Luau menetapkan counter sama dengan nilai awal, mengeksekusi blok kode dalam loop for , lalu menambahkan peningkatan ke respons.Jika peningkatan positif, maka proses diulang sampai counter sama atau lebih besar dari nilai akhir.Jika peningkatan negatif, maka proses diulang sampai counter sama dengan atau kurang dari nilai akhir.

Peningkatan opsional default ke 1. Tidak perlu menjadi angka keseluruhan.


for counter = 1, 3 do
print(counter)
end
--[[ Hasil keluaran:
1
2
3
]]
for counter = 1, 6, 2 do
print(counter)
end
--[[ Hasil keluaran:
1
3
5
]]
for counter = 2, 0, -0.5 do
print(counter)
end
--[[ Hasil keluaran:
2
1.5
1
0.5
0
]]

Umum untuk loop

Lingkaran umum for berulang atas item dalam koleksi daripada urutan angka.Dengan loop umum for , Anda dapat mengeksekusi kode untuk setiap item dalam koleksi, dan dapat dengan mudah menggunakan setiap item dalam kode.

Untuk loop membutuhkan fungsi, atau iterator, untuk mengulangi berbagai jenis koleksi.Global ipairs() mengembalikan iterator untuk array, dan global pairs() mengembalikan iterator untuk kamus.Perpustakaan string memberikan string.gmatch() untuk mengulangi string.

Iterasi umum

Di Luau, Anda dapat mengulangi atas tabel menggunakan kata kunci in langsung di tabel, bukan menggunakan fungsi iterator seperti ipairs() :


for i, v in {1, 2, 3, 4, 5} do
print(i, v)
end

Iterasi umum juga memungkinkan Anda menggunakan metode __iter metametode untuk membuat fungsi iterasi khusus.Contoh yang disengaja ini mengulangi melalui array dalam urutan terbalik, dari elemen terakhir ke elemen pertama:


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
--[[ Hasil keluaran:
5 5
4 4
3 3
2 2
1 1
]]

Matriks

Fungsi ipairs() kembalikan iterator yang mengiterasi indeks numerik di tabel dan kembalikan index dan value untuk setiap elemen.Ini membuatnya sesuai untuk array, di mana semua indeks adalah numerik.


local array = {"a", "b", "c", "d", "e"}
for index, value in ipairs(array) do
print(index, value)
end
--[[ Hasil keluaran:
1 a
2 b
3 c
4 d
5 e
]]

Kamus

Fungsi pairs() kembalikan iterator yang mengiterasi semua indeks (termasuk indeks numerik) di tabel dan kembalikan key dan value untuk setiap entri di kamus.Urutan elemen melintasi di tabel kamus adalah arbitrer.Ini membuatnya sesuai untuk mengulangi atas kamus, di mana item disimpan di luar urutan dengan indeks non-numerik.


local dictionary = {
[1] = "a",
["Hello"] = "b",
[5] = "c",
[true] = "d",
["World"] = "f",
[false] = "e"
}
for key, value in pairs(dictionary) do
print(key, value)
end
--[[ Hasil keluaran:
Hello b
true d
false e
World f
5 c
1 a
]]

Pecahkan loop

Untuk memaksa siklus akhiri, gunakan kata kunci break . Sampel kode berikut menunjukkan cara memecahkan siklus tak berujung whiledo .


local secondsElapsed = 0
local timeout = 5
while true do
task.wait(1)
secondsElapsed += 1
print("Seconds elapsed:", secondsElapsed)
if secondsElapsed == timeout then
break
end
end
print("Five seconds elapsed. Time to move on!")
--[[ Hasil keluaran:
1
2
3
4
5
Five seconds elapsed. Time to move on!
]]

Lanjutkan loop

Untuk memaksa loop untuk berulang dan mulai lagi, gunakan kata kunci continue.Sebuah loop for akan mengulangi respons; while dan repeatuntil akan memeriksa kondisi loop sebelum melanjutkan.Contoh kode berikut mendapatkan semua anak dari Instance dari spesifik ClassName .


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